更改一个组合框/文本框后更新其他组合框的项目列表?

时间:2014-09-24 14:30:04

标签: c# winforms system.reactive

我有一个WinForms表单,它有一个gridview和几个组合框和文本框。这些组合框和文本框用于过滤gridview中显示的数据。

Combobox1列出Column1中的所有不同值,Combobox2列出了网格视图的Column2中的所有不同值,等等。

如何实现以下功能?

更改ComboboxN(或文本框)后,它不仅会过滤网格视图(select (first page)... from ... where Column1 = {Combobox selected value}),还会刷新所有其他组合框的项目列表。问题是

  • 组合框在重新分配项目列表后丢失了当前选择的值,重置选定的值将触发更新其他组合框的项目列表并创建无限循环?

Rx框架是否是更好的工具来实现它?

1 个答案:

答案 0 :(得分: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来避免循环。