如何从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);
}
答案 0 :(得分:0)
您要向DataRow
添加ComboBox
个对象,而DataRow
没有标题为ID
和Name
的属性(从技术上讲,它们确实有Name
{1}}属性,但它不是你想到的那个)
一种简单的记忆方式是使用DisplayMemberPath
和SelectedValuePath
,您需要能够使用DataItem.PropertyName
的语法访问该属性,因此在您的情况下,它正在尝试访问DataRow.ID
和DataRow.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));
}