[CLOSED] DisplayField Re-Run Renderer Function

  1. #1

    [CLOSED] DisplayField Re-Run Renderer Function

    I have a DisplayField where I use a Renderer function to populate the DisplayField.Text from a JavaScript method. When the value is changed in the JavaScript method I need to update the DisplayField.Text. How do I force the DisplayField to re-run the Renderer function?
    Last edited by Daniil; Jun 05, 2015 at 9:50 AM. Reason: [CLOSED]
  2. #2
    Hi @Sobhia,

    Please demonstrate how you change the DisplayField's value.

    If I call a DisplayField's .setValue(), a Renderer does the job.
  3. #3
    Hi Daniil,

    Thank you for your reply.

    On the DisplayField I use .Renderer(r => r.Fn = "test") this calls the test function in the JavaScript and returns the value I need.

    When a user selects a button the value in the test function changes, however the value in the DisplayField is not updated because the Renderer is not re-run. Is it possible to re-run a Renderer?
    Last edited by Sobhia; Jun 04, 2015 at 2:04 PM.
  4. #4
    Hi Daniil,

    I have produced a test case.

    The User selects the first row and clicks the Popup button. This opens up a FieldSet which contains a DisplayField called Label1: and this updates the DisplayField.Text value to C1. The User then selects the Close button and selects the second row and clicks the Popup button. When the FieldSet is open the Label1.Text should display C2 but still displays C1.

    To set the DisplayField.Text I use a Renderer.

     
    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="System.Collections.Generic" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                List<object> data = new List<object>
                {
                    new {Country = "C1", State = "C1_S1"},
                    new {Country = "C2", State = "C2_S1"},
                    new {Country = "C3", State = "C3_S1"},
                };
    
                Store1.DataSource = data;
    
                List<object> countries = new List<object>(10);
                for (int i = 1; i <= 10; i++)
                {
                    countries.Add(new { Text = "C" + i });
                }
    
                CountryStore.DataSource = countries;
    
                List<object> test = new List<object>
                {
                    new {City = "C1_S1_C1"},
                    new {City = "C2_S1_C1"},
                    new {City = "C3_S1_C1"},
                };
    
                Store2.DataSource = test;
            }
        }
    
        protected void StatesRefresh(object sender, StoreReadDataEventArgs e)
        {
            string country = e.Parameters["query"];
    
            List<object> states = new List<object>(10);
            for (int i = 1; i <= 10; i++)
            {
                states.Add(new { Text = country + "_S" + i });
            }
    
            StateStore.DataSource = states;
            StateStore.DataBind();
        }
    
        protected void CitiesRefresh(object sender, StoreReadDataEventArgs e)
        {
            string state = e.Parameters["query"];
    
            List<object> cities = new List<object>(10);
            for (int i = 1; i <= 10; i++)
            {
                cities.Add(new { Text = state + "_C" + i });
            }
    
            CityStore.DataSource = cities;
            CityStore.DataBind();
        }
    
        protected void Edit(object sender, DirectEventArgs e)
        {
            List<string> fields = new List<string> { "country", "state", "city" };
            int startIndex = fields.IndexOf(e.ExtraParams["field"]);
            JsonObject data = JSON.Deserialize<JsonObject>(e.ExtraParams["record"]);
            ModelProxy record = this.Store1.GetAt(int.Parse(e.ExtraParams["index"]));
    
            for (int i = startIndex + 1; i < 4; i++)
            {
                switch (fields[i])
                {
                    case "state":
                        record.Set(fields[i], data["country"] + "_S1");
                        data["state"] = data["country"] + "_S1";
                        break;
                    case "city":
                        record.Set(fields[i], data["state"] + "_C1");
                        data["city"] = data["state"] + "_C1";
                        break;
                }
            }
        }
    
       
    </script>
    
    <!DOCTYPE html>
    
    <html>
    <head id="Head1" runat="server">
        <title>Ext.NET Examples</title>
        <link href="/resources/css/examples.css" rel="stylesheet" />
    
        <script>
            var selectedVal = "C1";
            var beforeEdit = function (ed, e) {
    
                var field = this.getEditor(e.record, e.column).field;
    
                switch (e.field) {
                    case "state":
                        field.allQuery = e.record.get('country');
                        break;
                    case "city":
                        field.allQuery = e.record.get('state');
                        break;
                }
            };
    
            var test = function () {
                debugger
                return selectedVal;
            };
            var selectedRow = function (a, b) {
                debugger
                selectedVal = b.data.country;
            };
            var show = function () {
                if (selectedVal != null) {
                    Ext.getCmp("FieldSetOne").show();
                }
                else {
                    Ext.Msg.alert('Error', 'Please select a record within the data grid before selecting Popup')
                }
            };
            var hide = function () {
                Ext.getCmp("FieldSetOne").hide();
            };
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
            <ext:ResourceManager ID="ResourceManager1" runat="server" />
    
            <ext:Store ID="CountryStore" runat="server">
                <Model>
                    <ext:Model ID="Model1" runat="server">
                        <Fields>
                            <ext:ModelField Name="text" Type="String" ServerMapping="Text" />
                        </Fields>
                    </ext:Model>
                </Model>
            </ext:Store>
    
            <ext:Store ID="StateStore" runat="server" OnReadData="StatesRefresh">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Model>
                    <ext:Model ID="Model2" runat="server">
                        <Fields>
                            <ext:ModelField Name="text" Type="String" ServerMapping="Text" />
                        </Fields>
                    </ext:Model>
                </Model>
            </ext:Store>
    
            <ext:Store ID="CityStore" runat="server" OnReadData="CitiesRefresh">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Model>
                    <ext:Model ID="Model3" runat="server">
                        <Fields>
                            <ext:ModelField Name="text" Type="String" ServerMapping="Text" />
                        </Fields>
                    </ext:Model>
                </Model>
            </ext:Store>
    
    
            <ext:GridPanel
                ID="GridPanel1"
                runat="server"
                Height="300"
                Width="600"
                Title="Grid"
                ForceFit="true">
                <Store>
                    <ext:Store ID="Store1" runat="server">
                        <Model>
                            <ext:Model ID="Model5" runat="server">
                                <Fields>
                                    <ext:ModelField Name="country" Type="String" ServerMapping="Country" />
                                    <ext:ModelField Name="state" Type="String" ServerMapping="State" />
                                </Fields>
                            </ext:Model>
                        </Model>
                    </ext:Store>
                </Store>
                <ColumnModel>
                    <Columns>
                        <ext:Column ID="Column1" runat="server" DataIndex="country" Text="Country">
                            <Editor>
                                <ext:ComboBox
                                    ID="CountryCombo"
                                    runat="server"
                                    QueryMode="Local"
                                    TriggerAction="All"
                                    StoreID="CountryStore"
                                    ValueField="text"
                                    DisplayField="text">
                                </ext:ComboBox>
                            </Editor>
                        </ext:Column>
    
                        <ext:Column ID="Column2" runat="server" DataIndex="state" Text="State">
                            <Editor>
                                <ext:ComboBox
                                    ID="StateCombo"
                                    runat="server"
                                    StoreID="StateStore"
                                    ValueField="text"
                                    DisplayField="text">
                                    <CustomConfig>
                                        <ext:ConfigItem Name="initQuery" Value="Ext.emptyFn" Mode="Raw" />
                                    </CustomConfig>
                                </ext:ComboBox>
                            </Editor>
                        </ext:Column>
                    </Columns>
                </ColumnModel>
                <TopBar>
                    <ext:Toolbar ID="Toolbar1" runat="server">
                       <Items>
                            <ext:Button ID="Button1" 
                                runat="server"
                                Text="Popup">
                                    <Listeners>
                                        <Click Handler="show()">
                                        </Click>
                                    </Listeners>
                            </ext:Button>
                       </Items>
                    </ext:Toolbar>
                </TopBar>
                <Plugins>
                    <ext:RowExpander ID="RowExpander1" runat="server">
                        <Component>
                            <ext:GridPanel
                                ID="GridPanel2"
                                runat="server"
                                Height="300"
                                Width="600"
                                Title="Grid"
                                ForceFit="true">
                                <Store>
                                    <ext:Store ID="Store2" runat="server">
                                        <Model>
                                            <ext:Model ID="Model6" runat="server">
                                                <Fields>
                                                    <ext:ModelField Name="city" Type="String" ServerMapping="City" />
                                                </Fields>
                                            </ext:Model>
                                        </Model>
                                    </ext:Store>
                                </Store>
                                <ColumnModel>
                                    <Columns>
                                        <ext:Column ID="Column3" runat="server" DataIndex="city" Text="City">
                                            <Editor>
                                                <ext:ComboBox
                                                    ID="CityCombo"
                                                    runat="server"
                                                    QueryMode="Remote"
                                                    StoreID="CityStore"
                                                    ValueField="text"
                                                    DisplayField="text">
                                                    <CustomConfig>
                                                        <ext:ConfigItem Name="initQuery" Value="Ext.emptyFn" Mode="Raw" />
                                                    </CustomConfig>
                                                </ext:ComboBox>
                                            </Editor>
                                        </ext:Column>
                                    </Columns>
                                </ColumnModel>
                                <Plugins>
                                    <ext:CellEditing>
                                        <Listeners>
                                            <BeforeEdit Fn="beforeEdit" />
                                        </Listeners>
                                        <DirectEvents>
                                            <Edit OnEvent="Edit" Before="return e.value !== e.originalValue;">
                                                <EventMask ShowMask="true" Target="CustomTarget" CustomTarget="App.GridPanel2" />
                                                <ExtraParams>
                                                    <ext:Parameter Name="field" Value="e.field" Mode="Raw" />
                                                    <ext:Parameter Name="index" Value="e.rowIdx" Mode="Raw" />
                                                    <ext:Parameter Name="record" Value="e.record.data" Mode="Raw" Encode="true" />
                                                </ExtraParams>
                                            </Edit>
                                        </DirectEvents>
                                    </ext:CellEditing>
                                </Plugins>
                     </ext:GridPanel>
                    </Component>
                    </ext:RowExpander>
                    <ext:CellEditing>
                        <Listeners>
                            <BeforeEdit Fn="beforeEdit" />
                        </Listeners>
                        <DirectEvents>
                            <Edit OnEvent="Edit" Before="return e.value !== e.originalValue;">
                                <EventMask ShowMask="true" Target="CustomTarget" CustomTarget="App.GridPanel1" />
                                <ExtraParams>
                                    <ext:Parameter Name="field" Value="e.field" Mode="Raw" />
                                    <ext:Parameter Name="index" Value="e.rowIdx" Mode="Raw" />
                                    <ext:Parameter Name="record" Value="e.record.data" Mode="Raw" Encode="true" />
                                </ExtraParams>
                            </Edit>
                        </DirectEvents>
                    </ext:CellEditing>
                </Plugins>
                <SelectionModel>
                    <ext:RowSelectionModel ID="rowSelectionModel" Mode="Single">
                    <Listeners>
                        <Select Fn="selectedRow"></Select>
                    </Listeners>
                    </ext:RowSelectionModel>
                </SelectionModel>
            </ext:GridPanel>
    
            <ext:FieldSet runat="server" Hidden="true" ID="FieldSetOne" Floating="true">
                <Items>
                    <ext:DisplayField runat="server" FieldLabel="Label1" ID="Label1" Name="Label1">
                        <Renderer Fn="test">
    
                        </Renderer>
                    </ext:DisplayField>
    
                    <ext:Button ID="Button2" 
                        runat="server"
                        Text="Close">
                            <Listeners>
                                <Click Handler="hide()">
                                </Click>
                            </Listeners>
                    </ext:Button>
                </Items>
                <Listeners></Listeners>
            </ext:FieldSet>
            
        </form>
    </body>
    </html>
  5. #5
    It doesn't look you need to use a Renderer. Please clarify is there any specific reason why do you use Renderer?

    What if remove the Renderer and replace the selectedRow function with:
    var selectedRow = function (a, b) {
        App.Label1.setValue(b.data.country);
    };
  6. #6
    Hi Daniil,

    Thank you for your response.

    There is no particular reason for me to use a Renderer.

    This works. Thank you. :-)

Similar Threads

  1. Replies: 3
    Last Post: Dec 17, 2013, 12:19 PM
  2. [CLOSED] Renderer function
    By tanky65 in forum 2.x Legacy Premium Help
    Replies: 4
    Last Post: Jul 30, 2012, 7:21 PM
  3. [CLOSED] GridPanel. Force renderer function of column
    By supera in forum 2.x Legacy Premium Help
    Replies: 2
    Last Post: Jun 25, 2012, 5:45 PM
  4. Replies: 4
    Last Post: May 31, 2011, 11:54 AM
  5. [CLOSED] Accessing Row value in row click renderer function
    By Etisbew in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: Jun 09, 2009, 4:11 AM

Tags for this Thread

Posting Permissions