[英]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.