在一个组合框/text框更改后,更新其他组合框的项目列表
本文关键字:组合 更新 其他 列表 项目 text 一个 | 更新日期: 2023-09-27 18:24:17
我有一个WinForms表单,它有一个网格视图和几个组合框和文本框。这些组合框和文本框用于过滤网格视图中显示的数据。
Combobox1
列出了网格视图的Column1
中的所有不同值,Combobox2
列出了Column2
中的所有不相同值,依此类推。
如何实现以下功能?
ComboboxN
(或文本框)更改后,它不仅会过滤网格视图(select (first page)... from ... where Column1 = {Combobox selected value}
),还会刷新所有其他组合框的项目列表。问题是
- 重新分配项目列表后,组合框丢失了其当前选定的值,重置选定的值将触发更新其他组合框的项目列表,并将创建无限循环
Rx框架会是实现它的更好工具吗?
您可以检查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
来避免循环。