如何为来自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);
}
您正在将DataRow
对象添加到您的ComboBox
, DataRow
没有标题为ID
和Name
的属性(从技术上讲,它们确实有Name
属性,但它不是您正在考虑的)
一个简单的方法是使用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));
}