【问题标题】:How to dynamically add data grid columns based on Binding?如何基于Binding动态添加数据网格列?
【发布时间】:2011-05-04 18:50:34
【问题描述】:

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

       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 天(任何月份)有 9 个 Bar2。我已经对所有数据进行了分类并准备就绪。但是,我想不出一种将月份中的天数动态添加为列的好方法。我添加了如何使用绑定来执行此操作,因为所有数据都在我的视图模型中,并且我真的不打算使用后面的代码添加列(当然,除非绝对必要)。

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

我还将考虑接受一个提供替代使用数据网格的答案。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    对于您想要动态生成的报告样式数据,DataTableDataGrid 配合得很好。例如,使用此 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;
    

    我们得到这个结果:

    【讨论】:

    • 完美。起初我试图在纯 XAML 中解决这个问题,但查看类似问题的示例,这对我来说似乎不是很有帮助。谢谢。
    【解决方案2】:

    这个问题让我想起了this

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

    另一方面......如果只是为了一些蹩脚的报告,Rick Sladkey 的解决方案看起来像“更少的代码”=> 更容易和更快地实现

    【讨论】:

    • 暂时只是为了统计目的。我几乎可以肯定这些要求将来会发生变化,所以我已经为该链接添加了书签。谢谢。
    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多