2013-01-01 142 views
1

我有一个绑定到对象的列表一个WinForms框列表如下:动态更改数据源?

BindingList<myObject> myListOfObjects = new BindingList<myObject>(); 

// 100 objects are added to myListOfObjects 

bindingSource1.DataSource = myListOfObjects; 
comboBox1.DataSource = bindingSource1; 
comboBox1.DisplayMember = "Name"; 

我对象的每个实例包含以下内容:

public string Name 
public int Index 
public List<int> Codes = new List<int>(); 

对象还实现INotifyPropertyChanged。

当在组合框中选择了一个对象“名称”时,我想将一个列表框绑定到所选对象的“代码”列表中。我想这样做,因为这样的:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    listBox1.DataSource = myListOfObjects[((myObject)comboBox1.SelectedValue).Index].Codes; 
} 

这不工作,我得到一个InvalidCastException(具体说的Int32不能被强制转换为myObject的)。我是否全部错了?

回答

2

问题是combobox1.SelectedValue将被设置为在组合框的ValueMember中指定的myObject属性。

为了获得潜在myObject,你需要使用comboBox1.SelectedItem

listBox1.DataSource = myListOfObjects[((myObject)comboBox1.SelectedItem).Index].Codes; 

如果这是我的代码,我也仔细检查,以确保的SelectedItem不为空,直接使用它之前:

if (comboBox1.SelectedItem != null) { 
    listBox1.DataSource = myListOfObjects[((myObject)comboBox1.SelectedItem).Index].Codes; 
} else { 
    listBox1.DataSource = null; 
} 
+0

Doh !!!非常感谢你。 – user685869