简体   繁体   中英

C# - Update databound combo box automatically

So I've found a lot of questions similar to this tho nothing really solve my problem..

I have a combobx that is bounded by a datasource

cmbProduct.DataSource = this.masterDataSet.Product.Where(x => x.Location == getLocation).AsDataView();
                    cmbProduct.DisplayMember = "Product";
                    cmbProduct.ValueMember = "Product";

But whenever i update the source, the combobox items does not update automatically. I still need to close then reopen the form.

is there a method to refresh/reload/or update the combobox?

You could implement an event that fires whenever the DataSet changes. The event could reset the Datasource and rebind it.

Somewhere in your code:

yourDataController.DataChanged += OnDataChanged; and the implementation

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";
}

Edit: Of course you need to manually implement the event and cause it to fire every time your data changes.

Solution 1

You can use an implementation of IBindingList as DataSource to view changes of data source in the bound list control (complex two-way data binding). The most suitable implementation is System.ComponentModel.BindingList<T> .

Then when you add items to the binding list, or remove item from it you will see changes immediately in the control.

Solution 2

But as a more simple solution with less changes for you, you can reset the databinding of your cmbProduct this way when you need; for example after a change, call 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";
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM