目前,我有一个需要改进的遗留项目,其中一个特别的部分给我带来了问题。我是 DevExpress 的新手(使用 11.2.10 版本),并且对当前的 .NET 开发相当陌生。
在查看 Stack 和 DexExpress 支持论坛和文档时,我发现了很多似乎与我正在尝试做的事情很接近的事情(主要涉及 selectedindexchanged 等),但没有任何东西完全适合这个......
这是发生了什么:
该站点的一个页面(“按钮”)允许编辑大量信息,其中大部分都整齐地组合在一起 ASPxRoundPanels 中的数据字段等。
其中一个圆形面板有一个组合框,显示按钮可以执行的所有“操作”列表。
此 (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));
}