当数据源更改时,ComboBox不会自动更新

本文关键字:更新 ComboBox 数据源 | 更新日期: 2023-09-27 18:08:21

由于某些原因,当从数据源(一个简单的BindingList)添加或删除项目时,组合框会相应地更新,但如果我像这样编辑一个项目,它不会自动更新:

myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;

为了让它更新,当我编辑一个项目,而不是创建或删除一个项目,我必须这样做后,更改:

myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;

这解决了问题,但它似乎是一个相当混乱的解决方案。此外,对于大列表,它可能会变得很慢(我知道过早的优化),但仍然有一种方法来强制ComboBox更新而不完全重新分配其数据源?

当数据源更改时,ComboBox不会自动更新

这在MSDN论坛中有说明:

IBindingList接口包含ListChanged事件,其中像组合框这样的控件连接到底层数据源分配给它实现上述接口。您的数据源必须用适当的ListChangeEventArgs引发相应的ListChanged当你添加、删除、更改你的IBindingList实现者时。这样,每当您使用的底层源绑定到您的,则对应的UI控件(组合框)为刷新。

你说你正在使用BindingList,事实上你确实得到了组合框来反映添加或删除项目事件。我认为你应该用另一种方式更新已经在BindingList中的项目,因为看起来正确的BindingList事件没有触发。

你可以调查一下或者简单地重置和重新分配数据源,我认为不是太糟糕,你是在有状态的Windows窗体应用程序中而不是在无状态的Webforms中所以你的对象总是在那里:)

你需要可观察集合和IPropertyChange实现:

绑定到ObservableCollection的ComboBox不更新

我有一个类似的问题,组合框不会填充它的选项列表,因为对象没有被渲染。导致"索引无效";运行第一个示例时出现错误。我通过在设置索引之前显示控件来解决这个问题。

ComboBox cb = new ComboBox() {
            DataSource = DataSource,
    };
        cb.SelectedIndex = index;
        this.Controls.Add(cb);
        cb.Update();
        
     

为:

ComboBox cb = new ComboBox();
        this.Controls.Add(cb);
        cb.Update();
        cd.DataSource = DataSource
        cb.SelectedIndex = index;
相关文章: