WPF中的ComboBox的DisplayMemberPath,C#

时间:2013-01-29 11:22:41

标签: c# wpf combobox datatable datarow

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

4 个答案:

答案 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" />