【问题标题】:Changing datasource dynamically?动态更改数据源?
【发布时间】:2013-01-01 20:37:27
【问题描述】:

我有一个绑定到对象列表的 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)。我是不是搞错了?

【问题讨论】:

    标签: c# .net data-binding combobox


    【解决方案1】:

    问题在于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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多