首页 文章

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

提问于
浏览
0

好吧,我一直在为这一天做好准备,谷歌一直没有什么帮助,我的伙伴也无法解决它,我们距离我们不到一天最后期限 . 帮助我们Obi-One Stackoverflow,你是我们唯一的希望:

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

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

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

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

结束编辑

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

//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

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

    DataTemplates

  • 0

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

    Creating a DataTemplate at runtime

相关问题