C# - 自动更新数据绑定组合框

时间:2015-11-20 10:12:18

标签: c# winforms combobox

所以我发现了许多与此类似的问题,没有什么可以解决我的问题..

我有一个由数据源

限制的组合框
cmbProduct.DataSource = this.masterDataSet.Product.Where(x => x.Location == getLocation).AsDataView();
                    cmbProduct.DisplayMember = "Product";
                    cmbProduct.ValueMember = "Product";

但每当我更新源代码时,组合框项目都不会自动更新。我仍然需要关闭然后重新打开表格。

是否有刷新/重新加载/或更新组合框的方法?

2 个答案:

答案 0 :(得分:1)

您可以实现在DataSet更改时触发的事件。该事件可能会重置数据源并重新绑定它。

代码中的某处:

yourDataController.DataChanged += OnDataChanged; 和实施

public void OnDataChanged(object sender, EventArgs e)
{
    cmbProduct.Items.Clear();
    cmbProduct.DataSource = this.masterDataSet.Product.Where(x => x.Location ==     getLocation).AsDataView();
    cmbProduct.DisplayMember = "Product";
    cmbProduct.ValueMember = "Product";
}

编辑:当然,您需要手动实施该事件,并在每次数据更改时触发该事件。

答案 1 :(得分:1)

解决方案1 ​​

您可以使用IBindingList的实现作为DataSource来查看绑定列表控件(复杂的双向数据绑定)中数据源的更改。最合适的实现是System.ComponentModel.BindingList<T>

然后,当您将项目添加到绑定列表或从中删除项目时,您将立即在控件中看到更改。

解决方案2

但是作为一个更简单的解决方案,对您的更改较少,您可以在需要时以这种方式重置cmbProduct的数据绑定;例如,在更改后,请致电RefreshBindings();

public void RefreshBindings()
{
    var list =  put your updated list here;

    this.cmbProduct.DataSource = null;
    this.cmbProduct.DataSource = list;
    this.cmbProduct.DisplayMember = "set the display member here";
    this.cmbProduct.ValueMember = "set the value member here";
}