我的DataTable
包含必要的DataRows
,我想在ComboBox
中显示。
第二个DataColumn
名为 VALUE
,我想将其设为DisplayMember
。
但是,根据ComboBox
的数量,我在DataRows
- 空行中看到的所有内容。
我究竟做错了什么?
DataTable dataTableManufacturers;
dm = new DatabaseManagement.DatabaseManagement(Properties.Settings.Default.DBServer,Properties.Settings.Default.DBName, Properties.Settings.Default.DBUser, Properties.Settings.Default.DBPassword);
dataTableManufacturers = dm.getManufacturers();
combxManufacturer.DisplayMemberPath = "VALUE";
foreach (DataRow row in dataTableManufacturers.Rows)
{
combxManufacturer.Items.Add(row);
}
答案 0 :(得分:3)
DisplayMemberPath
应为"[VALUE]"
,因为您打算使用this indexer(不是属性)来获取数据。有关详细信息,请参阅MSDN上的binding path syntax。
除了(重要的!)之外,“WPF方式”是设置控件的ItemSource
,而不是手动添加到Items
集合。
答案 1 :(得分:0)
尝试设置combxManufacturer.ItemsSource = dataTableManufacturers.Rows;
,而不是单独添加行。
答案 2 :(得分:0)
尝试设置combxManufacturer.ItemsSource
属性
combxManufacturer.ItemsSource = dataTableManufacturers.AsDataView;
并且无需添加项目
答案 3 :(得分:0)
我试过了,我知道它有效。
private DataTable testTable = new DataTable();
testTable.Columns.AddRange(new DataColumn[]
{
new DataColumn("ID", typeof(int)),
new DataColumn("Name", typeof(string)),
});
var row = testTable.NewRow();
row[0] = 1;
row[1] = "My Name";
testTable.Rows.Add(row);
myTestCmb.ItemsSource = TestTable.AsDataView();
<ComboBox x:Name ="myTestCmb" DisplayMemberPath="Name" />