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

本文关键字:动态 添加 DataGrid 数据 WPF | 更新日期: 2023-09-27 18:28:18

好吧,今天大部分时间我都在为这个问题挠头,谷歌帮不了什么忙,我的项目伙伴也没能解决这个问题,我们离截止日期还有不到一天的时间。帮助我们奥比一号堆栈溢出,你是我们唯一的希望:

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

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

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

编辑我似乎忘记了说明这一点:有些列将包含相同类型的数据(在我们的例子中:"Grade")。根据这个对象的子类型,我们需要一个不同的列类型。因此,网格将有n列,其中一些列必须绑定到相同类型的数据。

结束编辑

我无法设计一个每个列都有一个属性的容器类,因为它们是动态变化的。根据我所读到的内容,我无法将列绑定到数组的不同索引,我的最后一个方法是将不同的列绑定到一个表示数据类型的字符串("checkbox"、"string"、"combobox"),然后简单地向每个单独的列添加一个具有该名称的属性的容器。我找不到这样做的方法,因为似乎没有一个"Add"方法可以在网格的列上调用!在一厢情愿的代码中总结一下,我需要的是这样的东西:

//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);
}

其中checkbox是一个具有属性"Data"的对象列表(很抱歉,无法通过按tab然后按$来编码这个内联,可能是因为我使用的是瑞典语键盘)。然后,这些循环将被复制到我拥有的每种类型的列和数据(组合框和文本框)。

我希望这足以解释我的问题,并且有人知道在WPF中实现这一点的正确方法。

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

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

数据模板

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

在运行时创建数据模板