使用回调设置 ComboBox 值

发布于 2024-12-06 06:12:42 字数 7866 浏览 3 评论 0原文

我有一个包含 3 个组合框和 1 个按钮的 Asp.net 页面。第一个组合框选择将影响其他 2 个组合框数据源。我正在使用回调函数为另一个组合框设置数据源。 当用户从所有组合框中选择后,用户单击按钮并生成回发。 我的问题是服务器端代码不知道页面中所做的选择, 如果我尝试从组合框中获取值,我总是得到 null 。 寻找解决方案。

谢谢。

代码

Code of aspx
<script type="text/javascript">
    // <![CDATA[
        function OnProductChange(cb_Products) {
            cb_Packing.PerformCallback(cb_Products.GetValue().toString());
            cb_ProductionSite.PerformCallback(cb_Products.GetValue().toString());
        }
        function OnPackChange(cb_Products) {
            ASPxComboBox1.PerformCallback(cb_Packing.GetValue().toString());
        }`enter code here`
        function OnFactoryChange(cb_Products) {
            cb_ProductionSite.PerformCallback();
        }
    // ]]> 
    </script>

<PanelCollection>
            <dx:PanelContent runat="server" SupportsDisabledAttribute="True">
                <dx:ASPxLabel ID="ASPxLabel1" runat="server" Font-Bold="True" Font-Names="Snap ITC"
                    Font-Size="Medium" Font-Underline="True" ForeColor="#333333" Text="Production Form (DEMO)">
                </dx:ASPxLabel>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel2" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Select Product" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxComboBox ID="cb_Products" runat="server" ValueType="System.String" Font-Names="Berlin Sans FB Demi"
                    DataSourceID="EntityDataSource1" Spacing="3" TextField="PC_Name" EnableSynchronization="False"
                    ValueField="PCID" ClientIDMode="Static" DropDownStyle="DropDownList">
                    <Columns>
                        <dx:ListBoxColumn Caption="Product's name" FieldName="PCID" Visible="false" />
                        <dx:ListBoxColumn Caption="Product's name" FieldName="PC_Name" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnProductChange(s); }" />
                </dx:ASPxComboBox>
                <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=TrackQREntities"
                    DefaultContainerName="TrackQREntities" EnableFlattening="False" EntitySetName="TrackQR_ProductsCatalog"
                    Select="it.[PC_Name], it.[PCID]" Where="it.[ClientID] == 11">
                </asp:EntityDataSource>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel3" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Packing Options" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxComboBox ID="cb_Packing" runat="server" Font-Names="Berlin Sans FB Demi"
                    ValueType="System.String" ClientIDMode="Static" DropDownStyle="DropDown" EnableSynchronization="False"
                    OnCallback="Packing_Callback" TextField="PackQuantity"
                    ValueField="PackID" ClientInstanceName="cb_Packing" 
                    EnableCallbackMode="True">
                    <Columns>
                        <dx:ListBoxColumn FieldName="PackID" Visible="False" />
                        <dx:ListBoxColumn Caption="Pack Quantity" FieldName="PackQuantity" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnPackChange(s); }" />
                </dx:ASPxComboBox>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel4" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Production Site" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxComboBox ID="cb_ProductionSite" runat="server" Font-Names="Berlin Sans FB Demi"
                    ValueType="System.String" ClientIDMode="Static" DropDownStyle="DropDown" EnableSynchronization="False"
                    TextField="LLName" ValueField="LLID" 
                    ClientInstanceName="cb_ProductionSite" EnableCallbackMode="True" 
                    OnCallback="cb_ProductionSite_Callback" 
                     >
                    <Columns>
                        <dx:ListBoxColumn FieldName="LLID" Visible="False" />
                        <dx:ListBoxColumn Caption="Factory Name" FieldName="LLName" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnFactoryChange(s); }" />
                </dx:ASPxComboBox>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel5" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Number of Products" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxTextBox ID="atb_Quantity" runat="server" Width="170px">
                </dx:ASPxTextBox>
                <br />
                <dx:ASPxButton ID="ab_Produce" runat="server" Text="Produce" 
                    Font-Names="Arial Black" Font-Size="Medium" OnClick="ab_Produce_Click" 
                    CssFilePath="~/App_Themes/SoftOrange/{0}/styles.css" CssPostfix="SoftOrange" 
                    SpriteCssFilePath="~/App_Themes/SoftOrange/{0}/sprite.css">
                </dx:ASPxButton>
                <dx:ASPxComboBox ID="ASPxComboBox1" runat="server" Font-Names="Berlin Sans FB Demi"
                    ValueType="System.String" ClientIDMode="Static" DropDownStyle="DropDown" EnableSynchronization="False"
                    TextField="LLName" ValueField="LLID" 
                    ClientInstanceName="cb_ProductionSite" EnableCallbackMode="True" 
                    OnCallback="cb_ProductionSite_Callback" 
                     >
                    <Columns>
                        <dx:ListBoxColumn FieldName="LLID" Visible="False" />
                        <dx:ListBoxColumn Caption="Factory Name" FieldName="LLName" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnFactoryChange(s); }" />
                </dx:ASPxComboBox>
                <br />
                <br />
            </dx:PanelContent>

Code of aspx.cs

protected void Packing_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
        {
            //if (e.Parameter != "")
            //{
                using (TrackQREntities te = new TrackQREntities())
                {
                    int id = int.Parse(e.Parameter);
                    var product = te.TrackQR_ProductsCatalog.Where(s => s.PCID == id).FirstOrDefault();
                    cb_Packing.DataSource = product.TrackQR_PacksType.ToList();
                    cb_Packing.DataBind();

                    cb_Products.SelectedIndex = id;
             //   }
            }

        }

        protected void cb_ProductionSite_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
        {
            if (e.Parameter != "")
            {
                using (TrackQREntities te = new TrackQREntities())
                {
                    cb_ProductionSite.DataSource = te.TrackQR_LogisticLocations.Where(s => s.LLTypesID == 1).ToList();
                    cb_ProductionSite.DataBind();
                }
            }
        }

protected void ab_Produce_Click(object sender, EventArgs e)
        {

cb_ProductionSite.Value.ToString(); <--- Error Value is null

I have an Asp.net page with 3 combobox and 1 button. The first combobox selection will affect the other 2 combobox datasource. I'm setting the datasource for the other combobox using a callback function.
After the user choose from all the combobox, the user click the button and a postback is generate.
My Problem is that the server side code, is not aware of the selections made in the page,
if i try to get the value from the combobox I get null allways.
looking for a solution.

Thank you.

Code

Code of aspx
<script type="text/javascript">
    // <![CDATA[
        function OnProductChange(cb_Products) {
            cb_Packing.PerformCallback(cb_Products.GetValue().toString());
            cb_ProductionSite.PerformCallback(cb_Products.GetValue().toString());
        }
        function OnPackChange(cb_Products) {
            ASPxComboBox1.PerformCallback(cb_Packing.GetValue().toString());
        }`enter code here`
        function OnFactoryChange(cb_Products) {
            cb_ProductionSite.PerformCallback();
        }
    // ]]> 
    </script>

<PanelCollection>
            <dx:PanelContent runat="server" SupportsDisabledAttribute="True">
                <dx:ASPxLabel ID="ASPxLabel1" runat="server" Font-Bold="True" Font-Names="Snap ITC"
                    Font-Size="Medium" Font-Underline="True" ForeColor="#333333" Text="Production Form (DEMO)">
                </dx:ASPxLabel>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel2" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Select Product" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxComboBox ID="cb_Products" runat="server" ValueType="System.String" Font-Names="Berlin Sans FB Demi"
                    DataSourceID="EntityDataSource1" Spacing="3" TextField="PC_Name" EnableSynchronization="False"
                    ValueField="PCID" ClientIDMode="Static" DropDownStyle="DropDownList">
                    <Columns>
                        <dx:ListBoxColumn Caption="Product's name" FieldName="PCID" Visible="false" />
                        <dx:ListBoxColumn Caption="Product's name" FieldName="PC_Name" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnProductChange(s); }" />
                </dx:ASPxComboBox>
                <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=TrackQREntities"
                    DefaultContainerName="TrackQREntities" EnableFlattening="False" EntitySetName="TrackQR_ProductsCatalog"
                    Select="it.[PC_Name], it.[PCID]" Where="it.[ClientID] == 11">
                </asp:EntityDataSource>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel3" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Packing Options" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxComboBox ID="cb_Packing" runat="server" Font-Names="Berlin Sans FB Demi"
                    ValueType="System.String" ClientIDMode="Static" DropDownStyle="DropDown" EnableSynchronization="False"
                    OnCallback="Packing_Callback" TextField="PackQuantity"
                    ValueField="PackID" ClientInstanceName="cb_Packing" 
                    EnableCallbackMode="True">
                    <Columns>
                        <dx:ListBoxColumn FieldName="PackID" Visible="False" />
                        <dx:ListBoxColumn Caption="Pack Quantity" FieldName="PackQuantity" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnPackChange(s); }" />
                </dx:ASPxComboBox>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel4" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Production Site" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxComboBox ID="cb_ProductionSite" runat="server" Font-Names="Berlin Sans FB Demi"
                    ValueType="System.String" ClientIDMode="Static" DropDownStyle="DropDown" EnableSynchronization="False"
                    TextField="LLName" ValueField="LLID" 
                    ClientInstanceName="cb_ProductionSite" EnableCallbackMode="True" 
                    OnCallback="cb_ProductionSite_Callback" 
                     >
                    <Columns>
                        <dx:ListBoxColumn FieldName="LLID" Visible="False" />
                        <dx:ListBoxColumn Caption="Factory Name" FieldName="LLName" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnFactoryChange(s); }" />
                </dx:ASPxComboBox>
                <br />
                <br />
                <dx:ASPxLabel ID="ASPxLabel5" runat="server" Font-Names="Berlin Sans FB Demi" Font-Size="Medium"
                    Text="Number of Products" ForeColor="#FF3300">
                </dx:ASPxLabel>
                <dx:ASPxTextBox ID="atb_Quantity" runat="server" Width="170px">
                </dx:ASPxTextBox>
                <br />
                <dx:ASPxButton ID="ab_Produce" runat="server" Text="Produce" 
                    Font-Names="Arial Black" Font-Size="Medium" OnClick="ab_Produce_Click" 
                    CssFilePath="~/App_Themes/SoftOrange/{0}/styles.css" CssPostfix="SoftOrange" 
                    SpriteCssFilePath="~/App_Themes/SoftOrange/{0}/sprite.css">
                </dx:ASPxButton>
                <dx:ASPxComboBox ID="ASPxComboBox1" runat="server" Font-Names="Berlin Sans FB Demi"
                    ValueType="System.String" ClientIDMode="Static" DropDownStyle="DropDown" EnableSynchronization="False"
                    TextField="LLName" ValueField="LLID" 
                    ClientInstanceName="cb_ProductionSite" EnableCallbackMode="True" 
                    OnCallback="cb_ProductionSite_Callback" 
                     >
                    <Columns>
                        <dx:ListBoxColumn FieldName="LLID" Visible="False" />
                        <dx:ListBoxColumn Caption="Factory Name" FieldName="LLName" />
                    </Columns>
                    <ClientSideEvents SelectedIndexChanged=" function(s,e) { OnFactoryChange(s); }" />
                </dx:ASPxComboBox>
                <br />
                <br />
            </dx:PanelContent>

Code of aspx.cs

protected void Packing_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
        {
            //if (e.Parameter != "")
            //{
                using (TrackQREntities te = new TrackQREntities())
                {
                    int id = int.Parse(e.Parameter);
                    var product = te.TrackQR_ProductsCatalog.Where(s => s.PCID == id).FirstOrDefault();
                    cb_Packing.DataSource = product.TrackQR_PacksType.ToList();
                    cb_Packing.DataBind();

                    cb_Products.SelectedIndex = id;
             //   }
            }

        }

        protected void cb_ProductionSite_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
        {
            if (e.Parameter != "")
            {
                using (TrackQREntities te = new TrackQREntities())
                {
                    cb_ProductionSite.DataSource = te.TrackQR_LogisticLocations.Where(s => s.LLTypesID == 1).ToList();
                    cb_ProductionSite.DataBind();
                }
            }
        }

protected void ab_Produce_Click(object sender, EventArgs e)
        {

cb_ProductionSite.Value.ToString(); <--- Error Value is null

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遮了一弯 2024-12-13 06:12:42

Check whether or not the ASPxComboBox.ValueType property is specified correctly according to the “Data Type Mappings (ADO.NET)” table.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文