2013-01-11 12 views
1

目前,我有一個遺留項目需要改進,其中一個特定的部分給我的問題。我是DevExpress的新手(使用11.2.10版本),對於當前的.NET開發來說相當新穎。如何通過SelectedIndexChange或SelectedItemChange等通過ASPxComboBox平穩地保存更新的數據

在查看Stack和DexExpress支持論壇和文檔時,我發現了很多似乎與我正在嘗試做的事情(主要涉及selectedindexchanged等)的東西,但完全沒有什麼符合這個...

這裏是正在發生的事情:

其中一個網站的頁面(「按鈕」)允許編輯了大量的信息,其中大部分都整齊地組合在一起ASPxRoundPanels數據字段等

這些圓形面板中的一個具有ComboBox,它顯示按鈕可以顯示的所有「操作」列表做。

此選擇語句(SQL_SelectAllButtonActions)正常工作,從數據庫的操作表中提取所有可能的操作。

組合框(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> 

這裏是什麼樣子在我的數據類文件:

<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

方法Sql_UpdateButtonAction和Sql_UpdateButtonItem工作正常,但當你改變下拉沒有任何反應(沒有回傳?) –

+0

啊,組合框中的值確實會改變。但數據庫值不會更改(因此,如果我刷新頁面,它將恢復爲顯示原始值。)同樣,沒有錯誤消息。 –

回答

0

每我被DevExpress的給出了答案:

由於這兩個組合框的客戶端SelectedIndexChanged事件被處理,一個回調被髮送到ASPxCallback控件,當前值通過GetValue方法作爲參數傳遞。

另外,在ASPxCallback1_Callback方法中,應該在交換機模塊中添加兩個額外的情況。在這些情況下,SQL Update命令將被調用以基於當前選定按鈕的選定值更新數據。