2014-09-24 129 views
0

我有一個WinForms窗體,它有一個gridview和幾個組合框和文本框。這些組合框和文本框用於過濾gridview中顯示的數據。一個組合框/文本框更改後更新其他組合框的項目列表?

Combobox1列出Column1,Combobox2中的所有不同值,並列出gridview中Column2等等的所有不同值。

如何實現以下功能?

ComboboxN(或文本框)發生更改後,它不僅會過濾gridview(select (first page)... from ... where Column1 = {Combobox selected value}),還會刷新所有其他組合框的項目列表。問題是

  • 的組合框失去了它的項目列表後,當前選擇的價值被重新分配,並復位選擇的值會觸發更新其他組合框的項目列表,它會創建無限循環?

請問Rx框架是更好的實現它的工具嗎?

+1

你正在申請什麼樣的過濾器?你能發佈代碼嗎?我相信數據綁定可以在這裏幫助很多。 – 2014-09-24 14:33:03

+0

它會動態創建一條SQL語句並獲取大數據源的第一頁並重置gridview數據源。 – ca9163d9 2014-09-24 14:38:33

回答

0

如果ActiveControl與當前事件控制不同,那麼您可以檢查ActiveControl屬性,那麼它不應該重新分配列表。

例如,您有兩個組合框combobox1和combobox2。現在,您想要將組合框從一個組件框填充到另一個組件框。

private void combobox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    if (this.ActiveControl != combobox2) 
     FillCombobox2() 
} 
private void combobox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    if (this.ActiveControl != combobox1) 
     FillCombobox1() 
} 

這是您可以嘗試的第一種方法。

但是,我在這裏有一個問題,你爲什麼這樣做。如果選擇Combobox1值,則應重新填充Combobox2。但是,爲什麼您在Combobox2價值變化上再次重新使用Combobox1?

順便說一句,如果你想在填充後設置其他組合框中選定的值。那麼你可以持有任何變量以前選擇的值,那麼你可以填充

var val = combobox2.SelectedValue; 
FillCombobox2(); 
combobox2.SelectedValue = val; 

您可以通過檢查ActiveControl正如我上面建議避免循環後重新設置。

相關問題