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没有标题为IDand的属性Name(从技术上讲,它们确实有一个Name属性,但它不是您想要的那个)

一个容易记住的方法是使用DisplayMemberPathand SelectedValuePath,您需要能够使用 的语法访问该属性DataItem.PropertyName,因此在您的情况下,它试图访问DataRow.IDandDataRow.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 回答