在一个组合框/text框更改后,更新其他组合框的项目列表

本文关键字:组合 更新 其他 列表 项目 text 一个 | 更新日期: 2023-09-27 18:24:17

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

Combobox1列出了网格视图的Column1中的所有不同值,Combobox2列出了Column2中的所有不相同值,依此类推。

如何实现以下功能?

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

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

Rx框架会是实现它的更好工具吗?

在一个组合框/text框更改后,更新其他组合框的项目列表

您可以检查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?

BTW,如果您想在填充后在另一个组合框中设置回选定的值。然后,您可以在任何变量中保留以前选择的值,然后在填充后进行设置

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

正如我上面所建议的,您可以通过检查ActiveControl来避免循环。