[CLOSED] Set value in linked ComboBoxs from AjaxMethod

  1. #1

    [CLOSED] Set value in linked ComboBoxs from AjaxMethod



    Hi
    How do I set values in linked ComboBoxes?

    Please see example code

    Regards
    Mikael
    <%@ Page Language="C#" %>
    
    
    <%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
    <!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 id="Head1" runat="server">
    
    
    <script type="text/javascript">
    </script>
    
    
    <title></title>
    
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Ext.IsAjaxRequest)
            {
                object data = new object[]
                {
                    new object[]{"1","Item1"},
                    new object[]{"2","Item2"},
                    new object[]{"3","Item3"},
                    new object[]{"4","Item4"},
                    new object[]{"5","Item5"}
                };
    
    
                StoreCombo1.DataSource = data;
                StoreCombo1.DataBind();
            }
    
    
            if (!this.IsPostBack)
            {
                //cbCombo1.SelectedItem.Value = "3";
                //StoreCombo1.CustomConfig.Add(new ConfigItem("withPredefined", "true", ParameterMode.Raw));
    
    
                //cbCombo2.SelectedItem.Value = "3_3";
                //StoreCombo2.CustomConfig.Add(new ConfigItem("withPredefined", "true", ParameterMode.Raw));
    
    
                //cbCombo3.SelectedItem.Value = "3_3_3";
                //StoreCombo3.CustomConfig.Add(new ConfigItem("withPredefined", "true", ParameterMode.Raw));
            }
        }
    
    
        [AjaxMethod]
        public void SelectValue()
        {
            cbCombo1.SelectedItem.Value = "3";
            StoreCombo1.CustomConfig.Add(new ConfigItem("withPredefined", "true", ParameterMode.Raw));
    
    
            cbCombo2.SelectedItem.Value = "3_3";
            StoreCombo2.CustomConfig.Add(new ConfigItem("withPredefined", "true", ParameterMode.Raw));
    
    
            cbCombo3.SelectedItem.Value = "3_3_3";
            StoreCombo3.CustomConfig.Add(new ConfigItem("withPredefined", "true", ParameterMode.Raw));        
        
        }
        
        protected void LoadCombo2s(object sender, StoreRefreshDataEventArgs e)
        {
            string value = cbCombo1.SelectedItem.Value;
            object data = new object[]
            {
                new object[]{value + "_1","Item" + value + "_1"},
                new object[]{value + "_2","Item" + value + "_2"},
                new object[]{value + "_3","Item" + value + "_3"},
                new object[]{value + "_4","Item" + value + "_4"},
                new object[]{value + "_5","Item" + value + "_5"}
            };
    
    
    
            StoreCombo2.DataSource = data;
            StoreCombo2.DataBind();
        }
    
    
    
        protected void LoadCombo3s(object sender, StoreRefreshDataEventArgs e)
        {
            string value = cbCombo2.SelectedItem.Value;
            object data = new object[]
            {
                new object[]{value + "_1","Item" + value + "_1"},
                new object[]{value + "_2","Item" + value + "_2"},
                new object[]{value + "_3","Item" + value + "_3"},
                new object[]{value + "_4","Item" + value + "_4"},
                new object[]{value + "_5","Item" + value + "_5"}
            };
            StoreCombo3.DataSource = data;
            StoreCombo3.DataBind();
        }
    
    
    
        protected void LoadCombo4s(object sender, StoreRefreshDataEventArgs e)
        {
            string value = cbCombo3.SelectedItem.Value;
            object data = new object[]
            {
                new object[]{value + "_1","Item" + value + "_1"},
                new object[]{value + "_2","Item" + value + "_2"},
                new object[]{value + "_3","Item" + value + "_3"},
                new object[]{value + "_4","Item" + value + "_4"},
                new object[]{value + "_5","Item" + value + "_5"}
            };
            StoreCombo4.DataSource = data;
            StoreCombo4.DataBind();
        }
    </script>
    
    
    </head>
    <body>
    <form id="form1" runat="server">
    <ext:ScriptManager ID="ScriptManager1" runat="server">
    </ext:ScriptManager>
    
    
    <ext:Store ID="StoreCombo1" runat="server" AutoLoad="true">
        <Reader>
            <ext:ArrayReader ReaderID="Combo1Id">
                <Fields>
                    <ext:RecordField Name="Combo1Id" Type="String" />
                    <ext:RecordField Name="Combo1Name" Type="String" />
                </Fields>
            </ext:ArrayReader>
        </Reader>
        <Listeners>
            <Load Handler="if(this.initialized || !this.withPredefined){ #{cbCombo1}.setValue(this.getAt(0).data[#{cbCombo1}.valueField]);#{StoreCombo2}.reload();};this.initialized = true;"
            Single="false" />
        </Listeners>
    </ext:Store>
    
    
    <ext:Store ID="StoreCombo2" runat="server" AutoLoad="false" OnRefreshData="LoadCombo2s">
        <Reader>
            <ext:ArrayReader ReaderID="Combo2Id">
                <Fields>
                    <ext:RecordField Name="Combo2Id" Type="String" />
                    <ext:RecordField Name="Combo2Name" Type="String" />
                </Fields>
            </ext:ArrayReader>
        </Reader>
        <Listeners>
        <Load Handler="if(this.initialized || !this.withPredefined){#{cbCombo2}.setValue(#{cbCombo2}.store.getAt(0).get('Combo2Id'));#{StoreCombo3}.reload();}; this.initialized = true;" />
        </Listeners>
    </ext:Store>
    
    
    <ext:Store ID="StoreCombo3" runat="server" AutoLoad="false" OnRefreshData="LoadCombo3s">
        <Reader>
            <ext:ArrayReader ReaderID="Combo3Id">
                <Fields>
                    <ext:RecordField Name="Combo3Id" Type="String" />
                    <ext:RecordField Name="Combo3Name" Type="String" />
                </Fields>
            </ext:ArrayReader>
        </Reader>
        <Listeners>
            <Load Handler="if(this.initialized || !this.withPredefined){#{cbCombo3}.setValue(#{cbCombo3}.store.getAt(0).get('Combo3Id'));#{StoreCombo4}.reload();};this.initialized = true; " />
        </Listeners>
    </ext:Store>
    
    
    <ext:Store ID="StoreCombo4" runat="server" AutoLoad="false" OnRefreshData="LoadCombo4s">
        <Reader>
            <ext:ArrayReader ReaderID="Combo3Id">
                <Fields>
                    <ext:RecordField Name="Combo4Id" Type="String" />
                    <ext:RecordField Name="Combo4Name" Type="String" />
                </Fields>
                </ext:ArrayReader>
        </Reader>
        <Listeners>
            <Load Handler="#{cbCombo4}.setValue(#{cbCombo4}.store.getAt(0).get('Combo4Id'));" />
        </Listeners>
    </ext:Store>
    
    
    <ext:ComboBox ID="cbCombo1" runat="server" Width="200" FireSelect&#111;nload="true" StoreID="StoreCombo1"
    TypeAhead="true" Mode="Local" ForceSelection="true" TriggerAction="All" DisplayField="Combo1Name"
    ValueField="Combo1Id" EmptyText="No items">
        <Listeners>
        <Select Handler="#{StoreCombo2}.reload();" />
        </Listeners>
    </ext:ComboBox>
    
    
    <ext:ComboBox ID="cbCombo2" runat="server" Width="200" StoreID="StoreCombo2" TypeAhead="true"
    Mode="Local" ForceSelection="true" TriggerAction="All" DisplayField="Combo2Name" FireSelect&#111;nload="true"
    ValueField="Combo2Id" EmptyText="No items">
        <Listeners>
        <Select Handler="#{StoreCombo3}.reload();" />
        </Listeners>
    </ext:ComboBox>
    
    
    <ext:ComboBox ID="cbCombo3" runat="server" Width="200" StoreID="StoreCombo3" TypeAhead="true"
    Mode="Local" ForceSelection="true" TriggerAction="All" DisplayField="Combo3Name" FireSelect&#111;nload="true"
    ValueField="Combo3Id" EmptyText="No items">
        <Listeners>
        <Select Handler="#{StoreCombo4}.reload();" />
        </Listeners>
    </ext:ComboBox>
    
    
    <ext:ComboBox ID="cbCombo4" runat="server" Width="200" StoreID="StoreCombo4" TypeAhead="true"
    Mode="Local" ForceSelection="true" TriggerAction="All" DisplayField="Combo4Name"
    ValueField="Combo4Id" EmptyText="No items">
    </ext:ComboBox>
    
    
    
    <ext:Button runat="server" ID="btnButton" Text="Set value">
    <Listeners><Click Handler="Coolite.AjaxMethods.SelectValue();" /></Listeners>
    </ext:Button>
    
    
    </form>
    </body>
    </html>
  2. #2

    RE: [CLOSED] Set value in linked ComboBoxs from AjaxMethod

    Hi,

    Please see the following code
    [AjaxMethod]
            public void SelectValue()
            {
                StoreCombo2.RemoveAll();
                StoreCombo3.RemoveAll();
                    
                cbCombo1.SetInitValue("3");
                cbCombo2.SetInitValue("3_3");
                cbCombo3.SetInitValue("3_3_3");
    
                cbCombo1.AddScript("{0}.initialized=false;", cbCombo1.ClientID);
                cbCombo2.AddScript("{0}.initialized=false;", cbCombo2.ClientID);
                cbCombo3.AddScript("{0}.initialized=false;", cbCombo3.ClientID);
            }
  3. #3

    RE: [CLOSED] Set value in linked ComboBoxs from AjaxMethod



    Works excellet, thanks alot!
    As I noticed before, the value is flicking by before the actual text in shown. Is there anything you can do about that? or is it ext behavious?

    Regards
    Mikael
  4. #4

    RE: [CLOSED] Set value in linked ComboBoxs from AjaxMethod

    Hi,

    Try the modified code. If you don't use proxy in store then we can rebind stores in AjaxMethod (without superfluous requests)

    [AjaxMethod]
            public void SelectValue()
            {
                StoreCombo2.AddScript("{0}.initialized=false;{0}.withPredefined = true;", StoreCombo2.ClientID);
                StoreCombo3.AddScript("{0}.initialized=false;{0}.withPredefined = true;", StoreCombo2.ClientID);
    
                this.RebindStore(this.StoreCombo2, "3");
                this.RebindStore(this.StoreCombo3, "3_3");
                
                cbCombo1.SetValue("3");
                cbCombo2.SetValue("3_3");
                cbCombo3.SetValue("3_3_3");
            }
  5. #5

    RE: [CLOSED] Set value in linked ComboBoxs from AjaxMethod

    Hi
    I tried the new code but the "this.RebindStore(", does not work, the RebindStore get red marked in the studio, so its not found.

    /Mikael
  6. #6

    RE: [CLOSED] Set value in linked ComboBoxs from AjaxMethod

    Hi,

    Sorry, forgot to post it

    private void RebindStore(Store store, string value)
        {
            object data = new object[]
            {
                new object[]{value + "_1","Item" + value + "_1"},
                new object[]{value + "_2","Item" + value + "_2"},
                new object[]{value + "_3","Item" + value + "_3"},
                new object[]{value + "_4","Item" + value + "_4"},
                new object[]{value + "_5","Item" + value + "_5"}
            };
            store.DataSource = data;
            store.DataBind();
        }
  7. #7

    RE: [CLOSED] Set value in linked ComboBoxs from AjaxMethod

    Thanks, works great. This looks very good, no flicker at all!

    /Mikael

Similar Threads

  1. [CLOSED] Linked Comboboxes
    By romeu in forum 2.x Legacy Premium Help
    Replies: 2
    Last Post: May 11, 2012, 4:42 PM
  2. [CLOSED] Combo linked
    By majunior in forum 1.x Legacy Premium Help
    Replies: 3
    Last Post: May 02, 2011, 12:10 PM
  3. [CLOSED] InitScriptMode Linked
    By jeybonnet in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Oct 29, 2010, 1:38 PM
  4. [CLOSED] Linked Grids
    By asztern in forum 1.x Legacy Premium Help
    Replies: 3
    Last Post: Oct 05, 2010, 7:51 PM
  5. Replies: 2
    Last Post: Jan 08, 2010, 2:47 AM

Posting Permissions