如何为来自System.Data的DataRow的绑定设置DisplayMemberPath和SelectedValue

本文关键字:绑定 DataRow 设置 DisplayMemberPath SelectedValue Data System | 更新日期: 2023-09-27 18:04:37

如何设置DisplayMemberPath和SelectedValuePath从DataRow从System.Data绑定?

这就是我所做的,这是错的吗?

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);
}

如何为来自System.Data的DataRow的绑定设置DisplayMemberPath和SelectedValue

您正在将DataRow对象添加到您的ComboBox, DataRow没有标题为IDName的属性(从技术上讲,它们确实有Name属性,但它不是您正在考虑的)

一个简单的方法是使用DisplayMemberPathSelectedValuePath,你需要能够使用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));
}