如何基于Binding动态添加数据网格列?

时间:2011-05-04 18:50:35

标签: c# wpf

我目前正在尝试找出填写数据网格列的最佳方法。网格将显示为这样,其中标题表示月份的日期,行表示某种类型的分组。

       1 | 2 | 3 | 4
Foo    0   5   1   3
Bar    1   1   0   3
Foo2   3   9   7   6
Bar2   9   8   6   5

这意味着在第1天(无论什么月份),Bar2中有9个。我已经将所有数据排序并准备好了。但是,我无法想出一个动态添加月份日期作为列的好方法。我添加了如何使用绑定来执行此操作,因为所有数据都在我的视图模型中,并且我并不打算使用后面的代码添加列(当然,除非绝对必要)。

此外,这不需要使用数据网格,因为此报告纯粹用于统计,永远不会被修改。

我还会考虑接受一个可以替代使用数据网格的答案。

2 个答案:

答案 0 :(得分:4)

对于要动态生成的报表式数据,DataTable适用于DataGrid。例如,使用此XAML:

<Grid>
    <DataGrid ItemsSource="{Binding}"/>
</Grid>

这个代码背后:

var table = new DataTable();
table.Columns.Add(new DataColumn("Name"));
table.Columns.AddRange(Enumerable.Range(1, 4).Select(i => new DataColumn(i.ToString())).ToArray());
DataRow row = table.NewRow();
row[0] = "Foo";
row[1] = 0;
row[2] = 5;
row[3] = 1;
row[4] = 3;
table.Rows.Add(row);
DataContext = table;

我们得到了这个结果:

enter image description here

答案 1 :(得分:2)

这个问题让我想起了this

我认为您可以使用相同的ICustomTypeDescriptor方法来提供所需的列/属性

另一方面......如果仅仅是为了一些蹩脚的报道,Rick Sladkey的解决方案看起来像“少代码”=&gt;更容易,更快地实施