【问题标题】:Update the item lists of other comboboxes after one combobox/textbox changed?在一个组合框/文本框更改后更新其他组合框的项目列表?
【发布时间】:2014-09-25 11:23:24
【问题描述】:

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

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

如何实现以下功能?

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

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

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

【问题讨论】:

  • 您应用的是哪种过滤器?你可以发布代码吗?我相信数据绑定在这里可以大有帮助。
  • 它会动态创建SQL语句并获取大数据源的第一页并重置gridview数据源。

标签: c# winforms system.reactive


【解决方案1】:

您可以检查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 来避免循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2012-01-30
    • 1970-01-01
    • 2017-05-20
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多