現在、改善が必要なレガシー プロジェクトがあり、そのうちの 1 つの特定の部分が問題を引き起こしています。私は DevExpress (11.2.10 バージョンを使用) が初めてで、現在の .NET 開発にはかなり慣れていません。
Stack と DexExpress のサポート フォーラムとドキュメントを調べたところ、私がやろうとしていること (主に selectedindexchanged など) に近いと思われる多くのことが見つかりましたが、これに正確に適合するものはありません...
何が起こっているかは次のとおりです。
サイトのページの 1 つ (「ボタン」) では、多くの情報を編集できます。そのほとんどは、ASPxRoundPanels などのデータ フィールドにきちんとグループ化されています。
これらのラウンド パネルの 1 つには、ボタンで実行できるすべての「アクション」のリストを表示する ComboBox があります。
この select ステートメント (SQL_SelectAllButtonActions) は正しく機能し、データベースのアクション テーブルからすべての可能なアクションを引き出します。
コンボ ボックス (buttonAction) は、ボタン テーブルに 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));
}