如何通过SelectedIndexChange或SelectedItemChange等通过ASPxComboBox顺利保存更新的数据

时间:2013-01-11 20:31:58

标签: .net combobox devexpress selectedindexchanged

目前,我有一个需要改进的遗留项目,其中一个特定部分给我带来了问题。我是DevExpress的新手(使用11.2.10版本),对当前的.NET开发来说还是一个新手。

在查看Stack和DexExpress支持论坛和文档时,我发现很多东西似乎与我想要做的事情很接近(主要涉及selectedindexchanged等),但没有任何东西恰好适合这个... < / p>

以下是发生的事情:

网站的一个页面(“按钮”)允许编辑大量信息,其中大部分信息整齐地分组在ASPxRoundPanels等数据字段中。

其中一个圆形面板有一个ComboBox,显示按钮可以执行的所有“操作”列表。

此语句的select语句(SQL_SelectAllButtonActions)正常工作,从数据库的Action表中提取所有可能的操作。

组合框(buttonAction)可以正确地从该列表中选择在Button表上存储为Action_Id的特定值。

(到目前为止,非常好。)

目标:

当用户选择组合框值时,客户端非常希望自动更新页面(和数据库)。不进行回发,只需更改下拉列表(组合)框中的值即可。

因此,假设Button_Id 1有一些值,其中包括Action_Id 8.如果用户通过buttonAction组合框选择不同的值,那么我们应该更新Button_Id 1的记录以反映新的Action_Id值(即,而不是8)。

我有一个更新命令作为SqlDataSource(SQL_UpdateButtonAction)的一部分,它在数据库端手动测试时有效。

以下是我的代码,不会引发错误。但它不会保存/更新通过组合框编辑的按钮的Action_Id。

我错过了什么作品?欢迎提供所有帮助和建议,非常感谢!

<PanelCollection><dx:PanelContent ID="PanelContent1" runat="server"
 SupportsDisabledAttribute="True">
<div class="headerDiv"> 
<div class="buttonDiv">
 <dx:ASPxButton ID="ASPxButton1" runat="server" Text="Save Changes"
 AutoPostBack="False"> 
</dx:ASPxButton>
 </div>

<div style="float: left; width: 390px;"> 
<dx:ASPxRoundPanel ID="ASPxRoundPanel1" runat="server" Width="400px"
 HeaderText="Details"> 
<PanelCollection>
<dx:PanelContent ID="PanelContent3" runat="server">
 <div class="labelDiv"> Action </div>
 <div class="fieldDiv"> 
<dx:ASPxComboBox ID="buttonAction" runat="server" Width="240px"
 DataSourceID="ButtonActionsDataSource" TextField="name"
 ValueField="action_id" ValueType="System.Int32"> 
</dx:ASPxComboBox> 
/div>

 <asp:SqlDataSource ID="ButtonActionsDataSource" runat="server" 
ConnectionString="<%$ ConnectionStrings:<snip> %>"
 SelectCommand="SQL_SelectAllButtonActions" SelectCommandType="StoredProcedure"
 UpdateCommand="SQL_UpdateButtonAction" UpdateCommandType="StoredProcedure">
<UpdateParameters> 
<asp:Parameter Name="button_id" Type="Int32" />
<asp:Parameter Name="action_id" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>

以下是我的DataClasses文件中的内容:

<Function Name="dbo.Sql_UpdateButtonAction" Method="Sql_UpdateButtonAction">
<Parameter Name="button_id" Type="System.Int32" DbType="Int" />
<Parameter Name="action_id" Type="System.Int32" DbType="Int" />
<Return Type="System.Int32" />
</Function>

<Function Name="dbo.Sql_UpdateButtonItem" Method="Sql_UpdateButtonItem">
<Parameter Name="button_id" Type="System.Int32" DbType="Int" />
<Parameter Name="item_id" Type="System.Int32" DbType="Int" />
<Return Type="System.Int32" />
</Function>

[global::System.Data.Linq.Mapping.FunctionAttribute(Name = "dbo.Sql_UpdateButtonAction")]
public int Sql_UpdateButtonAction([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> button_id, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> action_id)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), button_id, action_id);
    return ((int)(result.ReturnValue));
}

[global::System.Data.Linq.Mapping.FunctionAttribute(Name = "dbo.Sql_UpdateButtonItem")]
public int Sql_UpdateButtonItem([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> button_id, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> item_id)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), button_id, item_id);
    return ((int)(result.ReturnValue));
}

1 个答案:

答案 0 :(得分:0)

根据DevExpress给出的答案:

由于处理了两个组合框的客户端SelectedIndexChanged事件,因此回调被发送到ASPxCallback控件,并且当前值通过GetValue方法作为参数传递。

此外,在ASPxCallback1_Callback方法中,应该在交换机块中添加另外两种情况。在这些情况下,将调用SQL Update命令以根据当前所选按钮的选定值更新数据。