簡體   English   中英

C# - 自動更新數據綁定組合框

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM