在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中实现这一点的正确方法。
使用数据模板。将每个查询强制转换为特定类型,并为该类型指定一个数据模板。您可以为该类型添加所需的所有XAML属性。WPF将根据类型选择正确的模板。
数据模板
好的,我看到你的结果集是非常动态的。你能通过在运行时创建一个DataTemplate来获得你想要的吗?
在运行时创建数据模板