C# 向WPF中的动态数据网格添加数据

C# 向WPF中的动态数据网格添加数据,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,好吧,我已经为这一天的大部分时间挠头了,谷歌帮不了什么忙,我的项目伙伴们也没能解决它,我们离最后期限还有不到一天的时间。帮助我们欧比一号,你是我们唯一的希望: 我有一个DataGrid,它由变量类型的可变列(DataGridTextColumn、DataGridComboxColumn、DataGridCheckBoxColumn)组成 我需要将数据绑定到它们 这些列中的每一列都代表一个数据库查询,这就是网格必须非常灵活的原因。我需要的帮助是如何在代码隐藏部分中绑定并向这些列添加数据 编辑 似乎

好吧,我已经为这一天的大部分时间挠头了,谷歌帮不了什么忙,我的项目伙伴们也没能解决它,我们离最后期限还有不到一天的时间。帮助我们欧比一号,你是我们唯一的希望:

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

我需要将数据绑定到它们

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

编辑 似乎我忘了说清楚:有些列将包含相同类型的数据(在我们的实例中为“Grade”)。根据此对象的子类型,我们需要为列指定不同的类型。因此,网格将有n列,其中一些必须绑定到相同类型的数据

结束编辑

我无法为每列设计一个具有一个属性的容器类,因为它们是动态变化的,从我所读到的内容来看,我无法将列绑定到数组的不同索引,我的最后一个方法想法是将不同的列绑定到表示数据类型的字符串(“复选框”、“字符串”、“组合框”)然后简单地向每个列添加一个具有该名称的属性的容器。我找不到这样做的方法,因为在网格的列上似乎没有可以调用的“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);
}
//创建任意数量的列
对于(int i=0;i
或者像这样:

//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);
}
//创建任意数量的列
对于(int i=0;i
其中复选框是具有属性“Data”的对象列表(抱歉,无法通过按tab-then$内联编辑此内容,可能是因为我使用的是瑞典键盘)。 然后,将为我拥有的每种类型的列和数据(组合框和文本框)复制这些循环


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

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


好的,我看到你的结果集非常动态。通过在运行时创建DataTemplate,您可以得到您想要的吗


当有多个相同类型的列时,这难道不会给我带来问题吗?是的,它会选择正确的模板,但它会选择该类型的正确数据集吗?我不这么认为,至少在我必须将列绑定到属性(必须在编译时命名)的情况下不会。