将数据添加到WPF中的动态DataGrid

时间:2012-03-20 12:17:13

标签: c# wpf wpfdatagrid

好吧,我一直在为这一天做好准备,谷歌一直没有什么帮助,我的同伴也无法解决这个问题,而且我们还不到一天远离我们的截止日期。帮助我们Obi-One Stackoverflow,你是我们唯一的希望:

我有一个DataGrid,它由可变数量的变量类型列组成(DataGridTextColumn,DataGridComboBoxColumn,DataGridCheckBoxColumn)

我需要将数据绑定到它们。

这些列中的每一列都代表一个数据库查询,这是网格必须非常灵活的原因。我需要帮助的是如何在代码隐藏部分中绑定和添加数据到这些列。

修改的 我似乎忘记了这一点:一些列将包含相同类型的数据(在我们的实例中:“Grade”)。根据此对象的子类型,我们将需要一个不同的列类型。因此,Grid将有n列,其中一些列必须绑定到相同类型的数据。

结束编辑

我无法设计一个容器类,每个列都有一个属性,因为它们是动态更改的,从我读过的内容我无法将列绑定到数组的不同索引,而最后一个方法 - 我的想法是将不同的列绑定到表示数据类型的字符串(“checkbox”,“string”,“combobox”),然后只需向每个单独的列添加一个具有该名称属性的容器。我找不到这样做的方法,因为似乎没有“添加”方法来调用网格的列! 总结一厢情愿的代码,我需要的东西是这样的:

//Create an arbitrary number of columns
for(int i = 0; i < NR_CHECKBOXES; ++i) {
    DataGridCheckBoxColumn col = new DataGridCheckBoxColumn();
    col.Header = titles[i];
    //which are bound to a container with correct type of data
    col.Binding = new Binding("checkboxes[" + i + "]");
    grid.Columns.Add(col);
}

grid.Add(checkboxes); //and then populate the grid

或类似的东西:

//Create an arbitrary number of columns
for(int i = 0; i < NR_CHECKBOXES; ++i) {
    DataGridCheckBoxColumn col = new DataGridCheckBoxColumn();
    col.Header = titles[i];
    col.Binding = new Binding("Data");
    col.Add(checkboxes[i]); //Populate the column specifically
    grid.Columns.Add(col);
}

其中复选框是具有“数据”属性的对象列表(抱歉,无法通过按Tab键然后$来编码此内联,可能因为我在瑞典语键盘上)。 然后将为每种类型的列和我拥有的数据(ComboBoxes和TextBoxes)复制这些循环。

我希望这足以解释我的问题,那里有人知道在WPF中实现这一目标的正确方法。

2 个答案:

答案 0 :(得分:0)

使用datatemplate。将每个查询作为特定类型转换,并为该类型指定datatemplate。您可以为该类型添加所需的所有XAML属性。 WPF将根据类型选择正确的模板。

DataTemplates

答案 1 :(得分:0)

好的,我看到你的结果集非常动态。你能通过在运行时创建DataTemplate来获得你想要的东西吗?

Creating a DataTemplate at runtime