如何获取数据绑定ComboBox以反映对BindingList数据源所做的更改

时间:2012-07-10 15:09:04

标签: c# winforms data-binding combobox

我的班级名称为String,ID号码为int

public class Item
{
    public int IDNumber { get; set; }
    public String Name  { get; set; }
}

我有List<Item>个用于创建BindingList<Item>的{​​{1}}。 BindingList<Item>DataSource的{​​{1}}我已经进行了数据绑定。我目前将ComboBox作为名称,Display Member目前作为IDNumber。

我可以更改Value Member但是当我这样做时Name的值变为“”。更清楚地说,名字是“戴夫”。用户输入“John”。我希望ComboBox.SelectedText更改为“John”,但它变为“”。

我尝试过使用SelectedText

INotifyPropertyChanged

只有在使用public class Item : INotifyPropertyChanged { private String name; public int IDNumber { get; set; } public String Name { get { return name; } set { this.name = value; if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs("Name")); } } public event PropertyChangedEventHandler PropertyChanged; } } 字段之前单击ComboBox之后才能执行此操作,而我希望在进行更改时更新它。

有谁知道如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:2)

使用Binding Source

致电Reset Bindings

示例

private BindingSource bs;

private SetupBinding()
{
    List<Item> data = new List<Item>();


    //Get Data 



    bs = new bindingsource();
    bs.datasource = data;
    combobox.datasource = bs;
    comboBox.DisplayMember="Name";
    comboBox.ValueMember="IDNumber";
}

private ShowMyMessage()
{
    MessageBox.Show(this, message, caption, buttons,
            MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, 
            MessageBoxOptions.RightAlign);
 if (bs != null)
 {
   bs.resetbindings(false);
 }
}  

然后确保您的组合框已选择并尝试选择文本

答案 1 :(得分:1)

使用comboBox.SelectedValue

因此您必须设置其DisplayMember 和ValueMember

喜欢

comboBox.DisplayMember="Name";
comboBox.ValueMember="IDNumber";

最后设置数据源