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 としてキャストできません)。私はこれについてすべて間違っていますか?

4

1 に答える 1

2

問題は、コンボボックスの で指定されたプロパティcombobox1.SelectedValueに設定されることです。myObjectValueMember

基になる を取得するにはmyObject、次を使用する必要がありますcomboBox1.SelectedItem

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

これが私のコードである場合、直接使用する前に SelectedItem が null でないことを再確認します。

if (comboBox1.SelectedItem != null) {
    listBox1.DataSource = myListOfObjects[((myObject)comboBox1.SelectedItem).Index].Codes;
} else {
    listBox1.DataSource = null;
}
于 2013-01-01T20:45:25.070 に答える