2012-03-20 101 views
0

好吧,我一直在为这一天的好时光挠头,Google一直没有什么帮助,我的同事项目伙伴也无法解决它我们距离我们的最后期限还不到一天。帮助我们奥比一个#1,你是我们唯一的希望:将数据添加到WPF中的动态数据网格

我有一个由变量类型的列可变数目(DataGridTextColumn,DataGridComboBoxColumn,DataGridCheckBoxColumn)

的DataGrid和我需要绑定数据给他们。

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

编辑 看来我忘了说清楚:有些列将包含相同类型的数据(在我们的例子中:“等级”)。根据这个对象的子类型,我们需要一个不同类型的列。因此,网格将有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中实现这一点的正确方法。

回答

0

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

DataTemplates

+0

那不是仍然给我的问题时,有相同类型的多个列?是的,它会选择正确的模板,但它会选择正确的该类型的数据集? – Glader 2012-03-20 14:49:12

+0

编辑我的原始问题。 – Glader 2012-03-20 15:27:02

0

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

Creating a DataTemplate at runtime

+0

我不这么认为,至少不是如果我必须将列绑定到属性(必须在编译时命名)。 – Glader 2012-03-20 20:37:24