0

System.DataのDataRowからのバインディングにDisplayMemberPathとSelectedValuePathを設定するにはどうすればよいですか?

これは私がしていることです、それは間違っていますか?

DataSet ds = new DataSet();
DataTable dt = new DataTable("tb1");
dt.Columns.Add("ID");
dt.Columns.Add("Name");
ds.Tables.Add(dt);

DataRow dr1 = ds.Tables[0].NewRow();
dr1["ID"] = 1;
dr1["Name"] = "Edwin";

DataRow dr2 = ds.Tables[0].NewRow();
dr2["ID"] = 2;
dr2["Name"] = "John";

DataRow dr3 = ds.Tables[0].NewRow();
dr3["ID"] = 3;
dr3["Name"] = "Dave";

ds.Tables[0].Rows.Add(dr1);
ds.Tables[0].Rows.Add(dr2);
ds.Tables[0].Rows.Add(dr3);

comboBox1.DisplayMemberPath = "Name";
comboBox1.SelectedValuePath = "ID";

foreach (DataRow item in ds.Tables[0].Rows)
{
    comboBox1.Items.Add(item);
}
4

1 に答える 1

0

DataRowにオブジェクトを追加していて、というタイトルのプロパティがComboBoxありDataRowません(技術的にはプロパティがありますが、考えているものではありません)IDNameName

覚える簡単な方法は、とを使用するDisplayMemberPathことSelectedValuePathです。の構文を使用してプロパティにアクセスできる必要があるDataItem.PropertyNameため、あなたの場合は、とにアクセスしようとしていますDataRow.IDDataRow.Name

たとえば、DisplayMemberPathは次のようなデータテンプレートへのショートカットです。

<TextBlock Text="{Binding DisplayMemberPathValue}" />

KeyValuePair<int,string>やカスタムクラスのような単純なものを追加するだけでよいでしょう。ComboBoxItem

comboBox1.SelectedValuePath = "Key";
comboBox1.DisplayMemberPath = "Value";

foreach (DataRow item in ds.Tables[0].Rows)
{
    comboBox1.Items.Add(
        new KeyValuePair<int,string>((int)item["ID"], row["Name"] as string));
}
于 2013-03-18T18:27:50.170 に答える