使用回调设置 ComboBox 值
我有一个包含 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
检查是否根据“数据类型映射”正确指定了 ASPxComboBox.ValueType 属性(ADO.NET)”表。
Check whether or not the ASPxComboBox.ValueType property is specified correctly according to the “Data Type Mappings (ADO.NET)” table.