[英]C# - Update databound combo box automatically
所以我发现了很多与此类似的问题,但没有什么能真正解决我的问题..
我有一个受数据源限制的组合框
cmbProduct.DataSource = this.masterDataSet.Product.Where(x => x.Location == getLocation).AsDataView();
cmbProduct.DisplayMember = "Product";
cmbProduct.ValueMember = "Product";
但是每当我更新源时,组合框项目都不会自动更新。 我仍然需要关闭然后重新打开表单。
有没有刷新/重新加载/或更新组合框的方法?
您可以实现一个在 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
您可以使用IBindingList
作为DataSource
的实现来查看绑定列表控件中数据源的更改(复杂的双向数据绑定)。 最合适的实现是System.ComponentModel.BindingList<T>
。
然后,当您将项目添加到绑定列表或从中删除项目时,您将立即在控件中看到更改。
解决方案2
但是作为一个更简单的解决方案,您可以在需要时cmbProduct
这种方式重置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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.