1

目前,我有一个需要改进的遗留项目,其中一个特别的部分给我带来了问题。我是 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));
}
4

1 回答 1

0

根据 DevExpress 给出的答案:

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

此外,在 ASPxCallback1_Callback 方法中,应将两个额外的情况添加到 switch 块中。在这些情况下,将调用 SQL Update 命令以根据当前选定按钮的选定值更新数据。

于 2013-01-18T14:09:45.780 回答