当 DataSource 值更改时,WinForms ComboBox 中的项目不会更新

Posted

技术标签:

【中文标题】当 DataSource 值更改时,WinForms ComboBox 中的项目不会更新【英文标题】:Items in WinForms ComboBox not updating when DataSource values change 【发布时间】:2015-11-12 12:40:22 【问题描述】:

我有一个通过数据源绑定到列表的组合框。出于某种原因,当数据源项更改时,组合框中的项似乎不会自动更新。我可以在调试器中看到数据源包含正确的项目。

*** 上有很多关于此的答案,但大多数都没有答案,不适合我,或者需要从使用列表更改为 BindingLists,由于使用方法 BindingLists 的代码量很大,我无法执行此实例没有。

肯定有一种简单的方法来告诉 ComboBox 刷新它的项目吗?我不敢相信这不存在。我已经有一个在需要更新 Combo 时触发的事件,但我更新值的代码无效。

组合声明:

    this.devicePortCombo.DataBindings.Add(
             new System.Windows.Forms.Binding("SelectedValue", 
               this.deviceManagementModelBindingSource, "SelectedDevice", true,
               DataSourceUpdateMode.OnPropertyChanged));
    this.devicePortCombo.DataSource = this.availableDevicesBindingSource;

更新组合框的代码:

private void Instance_PropertyChanged(object sender, PropertyChangedEventArgs e)

    if (e.PropertyName == "AvailableDevices")
    
        // Rebind dropdown when available device list changes.
        this.Invoke((MethodInvoker)delegate
        
            devicePortCombo.DataSource = AvailableDevicesList;
            devicePortCombo.DataBindings[0].ReadValue();
            devicePortCombo.Refresh();
        );
    

【问题讨论】:

如果您使用的是 BindingSource,您是否尝试过 BindingSource.ResetBindings() msdn.microsoft.com/en-us/library/… 当我在必须将数据源设置为空之前遇到此问题时,然后重新添加它。 但这可能会导致任何选定的值变为未设置,这与使用 BindingList 时的工作方式不同。 【参考方案1】:

您没有将 DataGridview 的 DataSource 绑定到第一次绑定的 this.availableDevicesBindingSource 的同一个 BindingSource 对象。但后来你绑定到不同的对象AvailableDevicesList。您再次为SelectedValue 使用另一个绑定源,即this.deviceManagementModelBindingSource

只使用一个BindingSource,可能会解决您的问题

【讨论】:

谢谢 - 但我的问题来自 2 年前 :) 您的问题没有答案,其他人可以从您的问题中寻求帮助。

以上是关于当 DataSource 值更改时,WinForms ComboBox 中的项目不会更新的主要内容,如果未能解决你的问题,请参考以下文章

c# winform_form属性详解以及事件详解(二)

C#WinForm中comboBox的DataSource获取数据是显示System.Data.DataRowView

c#winform 关于页面大小与控件大小的问题

C# winform DataGridView控件DataSource 绑定一个表后修改cell值的问题

Winform中实现更改DevExpress的RadioGroup的选项时更改其他控件(TextEditColorPickEdit)的值

C# DataGridView - 由 DataSource 引起的单元格更改事件