2014-09-24 135 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正如我上面建议避免循环后重新设置。

相关问题