[CLOSED] Store.reload() not being called in user control

Page 1 of 2 12 LastLast
  1. #1

    [CLOSED] Store.reload() not being called in user control

    I have two linked combo boxes in a user control.

    When I make a selection in the first combo, the Select Listener is being called. The second combo value is cleared, the trigger is hidden and the trigger on the first combo appears. The problem is that the stContacts OnRefreshData method does not get executed.

    First combo
    
                                <Listeners>
                                    <Select Handler="#{Contact}.clearValue();#{Contact}.triggers[0].hide();#{stContacts}.reload();this.triggers[0].show();" />
                                    <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                                    <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                                </Listeners>
    2nd combo
                                <Listeners>
                                    <Select Handler="this.triggers[0].show();" />
                                    <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                                    <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                                </Listeners>
                                <Store>
                                    <ext:Store
                                        runat="server"
                                        ID="stContacts"
                                        AutoLoad="false"
                                        OnRefreshData="stContacts_Refresh"
                                        RemotePaging="false">
                                        <Proxy>
                                            <ext:PageProxy />
                                        </Proxy> 
                                        <Reader>
                                            <ext:JsonReader >
                                                <Fields>
                                                    <ext:RecordField Name="ContactID" Type="Int" />
                                                    <ext:RecordField Name="ContactName" />
                                                </Fields>
                                            </ext:JsonReader>
                                        </Reader>
                                    </ext:Store>
                                </Store>
    I have the same code in a page (not in a user control) and everything works great.

    What should I try to identify the problem?
    Last edited by Daniil; Jun 13, 2011 at 3:58 PM. Reason: [CLOSED]
  2. #2
    Hi,

    Please provide your full test code to reproduce, because I was unable to reproduce using the piece of code you posted.

    Example Page
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Form.Controls.Add(LoadControl("TestUC.ascx"));
        }
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Ext.Net Example</title>
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
        </form>
    </body>
    </html>
    Example User Control
    <%@ Control Language="C#" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                Store store = this.ComboBox1.GetStore();
                store.DataSource = new object[] 
                { 
                    new object[] { "1", "item1" },
                    new object[] { "2", "item2" },
                    new object[] { "3", "item3" }
                };
                store.DataBind();
            }
        }
    
        protected void Store_RefreshData(object sender, StoreRefreshDataEventArgs e)
        {
            Store store = sender as Store;
            store.DataSource = new object[] 
            { 
                new object[] { "1", "item1" },
                new object[] { "2", "item2" },
                new object[] { "3", "item3" }
            };
        }
    
    </script>
    
    <ext:ComboBox ID="ComboBox1" runat="server">
        <Store>
            <ext:Store runat="server">
                <Reader>
                    <ext:ArrayReader>
                        <Fields>
                            <ext:RecordField Name="value" />
                            <ext:RecordField Name="text" />
                        </Fields>
                    </ext:ArrayReader>
                </Reader>
            </ext:Store>
        </Store>
        <Triggers>
            <ext:FieldTrigger Tag="clear" Icon="Clear" />
        </Triggers>
        <Listeners>
            <Select Handler="#{ComboBox2}.clearValue();#{ComboBox2}.triggers[0].hide();#{Store2}.reload();this.triggers[0].show();" />
            <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
            <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
        </Listeners>
    </ext:ComboBox>
    <ext:ComboBox ID="ComboBox2" runat="server">
        <Store>
            <ext:Store ID="Store2" runat="server" AutoLoad="false" OnRefreshData="Store_RefreshData">
                <Reader>
                    <ext:ArrayReader>
                        <Fields>
                            <ext:RecordField Name="value" />
                            <ext:RecordField Name="text" />
                        </Fields>
                    </ext:ArrayReader>
                </Reader>
            </ext:Store>
        </Store>
        <Triggers>
            <ext:FieldTrigger Tag="clear" Icon="Clear" />
        </Triggers>
        <Listeners>
            <Select Handler="this.triggers[0].show();" />
            <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
            <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
        </Listeners>
    </ext:ComboBox>
  3. #3

    Found the problem

    I found the problem.

    When I created a test control the issue went away. The page holding the control also had an stContacts_Refresh method and it was that method being called.

    Is there a way in the client script to force the control to be more accurately defined?

    You can mark this as closed.
  4. #4
    Is there a way in the client script to force the control to be more accurately defined?
    I think there is no automatic way to force it.
  5. #5

    I spoke too soon on this being closed

    User control...
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="menutest.ascx.cs" Inherits="TimeTracker.menutest" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <ext:Window 
        ID="LogEntryWindow" 
        runat="server" 
        Icon="Clock" 
        Title="My Test"
        Width="650" 
        Height="505" 
        AutoShow="false" 
        Modal="true" 
        Hidden="true"
        Layout="Fit"
        Resizable="true">
        <Items>
            <ext:FormPanel 
                ID="ActivityLogEntry" 
                runat="server" 
                Padding="5"
                AutoScroll="true">
                <Defaults>
                    <ext:Parameter Name="LabelSeparator" Value="" />
                </Defaults>
                <Items>
                    <ext:FieldSet ID="SuppliedTo" runat="server" Title="Supplied To" Layout="form" >
                        <Items>
                            <ext:ComboBox ID="Organization" 
                                runat="server" 
                                AllowBlank="true" 
                                SelectOnFocus="true"
                                Editable="true"
                                ForceSelection="false"
                                DisplayField="text"
                                ValueField="value"
                                TriggerAction="All"
                                EmptyText="Organization not defined"
                                Note="Restricted to names from the database"
                                LoadingText="Searching..." 
                                ListWidth="500"
                                MinListWidth="300"
                                Resizable="true"
                                PageSize="7"
                                MinChars="1"
                                AnchorHorizontal="100%"
                                TriggerIcon="Search">
                                <Triggers>
                                    <ext:FieldTrigger Icon="Clear" Qtip="Click to leave organization undefined" HideTrigger="true"/>
                                </Triggers>
                                <Listeners>
                                    <Select Handler="#{ContactName}.clearValue();#{ContactName}.triggers[0].hide();#{stContacts}.reload();this.triggers[0].show();" />
                                    <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                                    <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                                </Listeners>
                                <Store>
                                    <ext:Store
                                        runat="server"
                                        ID="stOrganizations"
                                        AutoLoad="false"
                                        OnRefreshData="stOrganizations_Refresh"
                                        RemotePaging="false">
                                        <Proxy>
                                            <ext:PageProxy />
                                        </Proxy> 
                                        <Reader>
                                            <ext:ArrayReader> 
                                                <Fields>
                                                    <ext:RecordField Name="value"/>
                                                    <ext:RecordField Name="text" />
                                                </Fields>
                                            </ext:ArrayReader>
                                        </Reader>  
                                    </ext:Store>
                                </Store>
                            </ext:ComboBox>
                            <ext:ComboBox ID="ContactName" 
                                runat="server" 
                                FieldLabel="Contact"
                                AllowBlank="true" 
                                SelectOnFocus="true"
                                Editable="true"
                                DisplayField="ContactName" 
                                ValueField="ContactID" 
                                ForceSelection="false"
                                Note="Restricted to contact names"
                                TriggerAction="All"
                                EmptyText="Contact not defined"
                                LoadingText="Searching..." 
                                ListWidth="500"
                                MinListWidth="300"
                                Resizable="true"
                                PageSize="7"
                                MinChars="1"
                                AnchorHorizontal="100%"
                                TriggerIcon="Search">
                                <Triggers>
                                    <ext:FieldTrigger Icon="Clear" Qtip="Click to leave contact undefined" HideTrigger="true"/>
                                </Triggers>
                                <Listeners>
                                    <Select Handler="this.triggers[0].show();" />
                                    <BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
                                    <TriggerClick Handler="if (index == 0) { this.clearValue(); this.triggers[0].hide(); }" />
                                </Listeners>
                                <Store>
                                    <ext:Store
                                        runat="server"
                                        ID="stContacts"
                                        AutoLoad="false"
                                        OnRefreshData="stContacts_Refresh"
                                        RemotePaging="false">
                                        <Proxy>
                                            <ext:PageProxy />
                                        </Proxy> 
                                        <Reader>
                                            <ext:ArrayReader >
                                                <Fields>
                                                    <ext:RecordField Name="ContactID" Type="Int" />
                                                    <ext:RecordField Name="ContactName" />
                                                </Fields>
                                            </ext:ArrayReader>
                                        </Reader>
                                    </ext:Store>
                                </Store>
                            </ext:ComboBox>
                        </Items>
                    </ext:FieldSet>
                </Items>
            </ext:FormPanel>
        </Items>
    </ext:Window>
    using System;
    using Ext.Net;
    
    namespace TimeTracker
    {
        public partial class menutest : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
            }
            public void Show()
            {
                this.LogEntryWindow.Show();
            }
    
            protected void stOrganizations_Refresh(object sender, StoreRefreshDataEventArgs e)
            {
                System.Diagnostics.Debug.WriteLine("stOrganizations_Refresh");
                stOrganizations.DataSource = new object[] {
                    new object[] { "1", "Org1" }, 
                    new object[] { "2", "Org2" }, 
                    new object[] { "3", "Org3" } }; 
                stOrganizations.DataBind();
            }
    
            protected void stContacts_Refresh(object sender, StoreRefreshDataEventArgs e)
            {
                string filter = e.Parameters["query"];
    
                int _id;
                if (this.Organization.SelectedItem == null)
                    _id = 0;
                else
                    if (this.Organization.SelectedItem.Value == null)
                        _id = 0;
                    else
                        if (this.Organization.SelectedItem.Value == "")
                            _id = 0;
                        else
                            _id = int.Parse(this.Organization.SelectedItem.Value);
    
                System.Diagnostics.Debug.WriteLine("stContacts_Refresh; " + filter + ", " + _id.ToString());
                if (_id > 0)
                {
                    string orgname = "Org " + _id.ToString() + " : ";
                    stContacts.DataSource = new object[] { 
                        new object[] { "1", orgname + "item1" }, 
                        new object[] { "2", orgname + "item2" }, 
                        new object[] { "3", orgname + "item3" } }; 
                }
                else
                {
                    stContacts.DataSource = new object[] { 
                        new object[] { "1", "item1" }, 
                        new object[] { "2", "item2" }, 
                        new object[] { "3", "item3" } }; 
                }
    
                stContacts.DataBind();
            }
            
        }
    }
  6. #6
    I guess you render that user control dynamically during DirectEvent, isn't that so?

    Please provide a simple .aspx page also.
  7. #7
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="TimeTracker.test" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <%@ Register Src="menutest.ascx" TagName="TimeLog" TagPrefix="heabc" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server">
        </ext:ResourceManager>
        <heabc:TimeLog ID="ActivityEditor" runat="server" EnableViewState="true" />
        <ext:Button ID="Button1" runat="server" Text="Show Test">
            <DirectEvents>
                <Click OnEvent="showTestWindow" />
            </DirectEvents>
        </ext:Button>
        </form>
    </body>
    </html>
    using System;
    using Ext.Net;
    
    namespace TimeTracker
    {
        public partial class test : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            { }
    
            protected void showTestWindow(object sender, DirectEventArgs e)
            {
                this.ActivityEditor.Show();
            }
        }
    }
    Steps:
    Launch the dialog.
    Use the contact combo trigger to pick item 2
    Use the organization combo trigger to pick org 3
    Notice that item 2 has been cleared from the contact combo.
    Use the contact combo trigger to show the dropdown and the list has not changed.
  8. #8
    Well, DirectEvent handler requires a control instance.

    Asp.Net doesn't recreate any controls automatically, so, you have to recreate (for example, within Page_Load) yourself.

    In general, I'd suggest you to use HttpProxy + WebService or Handler. You won't need to recreate a store instance (or user control at all) and it will increase performance, because DirectEvent causes full executing of page life cycle.
  9. #9
    I'm not really following what you suggest.
    Do you have an example you can point to?

    Will this change fix the problem?
  10. #10
    Apologize, I was wrong, you don't need to recreate a user control, because you set up it in the markup.

    Ok, lets return to the initial problem.
    The problem is that the stContacts OnRefreshData method does not get executed.
    I tried your last code and see that the stContacts_Refresh handler is executed. Can you check it on your side using, for example, Fiddler or FireBug?
Page 1 of 2 12 LastLast

Similar Threads

  1. Replies: 2
    Last Post: Feb 06, 2012, 9:06 AM
  2. Replies: 2
    Last Post: Dec 08, 2011, 1:00 PM
  3. Reload Grid From a User Control
    By walle in forum 1.x Help
    Replies: 0
    Last Post: Feb 27, 2011, 8:13 PM
  4. [CLOSED] How to reload tab (with user control)
    By macap in forum 1.x Legacy Premium Help
    Replies: 23
    Last Post: Nov 10, 2010, 10:49 AM
  5. Problem with store and user control
    By pierusch in forum 1.x Help
    Replies: 0
    Last Post: Jun 04, 2010, 10:14 PM

Posting Permissions