带有UnTyped数据源的C#ReportViewer

时间:2010-01-05 21:14:17

标签: c# reportviewer untyped-variables

我查看了问题的历史记录,点击谷歌和其他结果,但仍然对C#reportViewer感到困惑。它似乎只想使用“类型”数据集。正如许多其他人所询问的那样,我没有看到任何真正的答案,也许一个新的帖子会带来新的东西。

在最简单的形式中,我有一个从数据库执行查询的业务对象。我知道结果列是什么,并希望将其插入到我需要的“格式化”的特定报告中,而不是简单的柱状转储。

由于查询返回“DataTable”对象,但没有“已键入”的已知列,我已经被软管了。

正如其他帖子所述,如果我有200多个表,400多个视图和200多个存储过程的系统,我不想输入所有内容。特别是如果我正在执行一个新查询,该查询是从某些新存储过程加入的各个表的结果。

报告不应该这么困难。如果我输入的列错误,或者SUM(),COUNT()或其他错误,这是我的错,但至少让我在报告中得到一个无类型的表。

...帮助

1 个答案:

答案 0 :(得分:3)

DataTable的列不需要输入,它们都可以使用默认的字符串。

我做的是将DataSet添加到项目中,并设计了DataSet以匹配我的查询。我将所有列都保留为字符串。在RDLC中,我使用此DataSet作为我的数据源设置了一个表,严格用于设计时间。

在运行时,我改为动态交换我生成的DataTable并确保它与设计时DataSet相匹配(因为它们都是字符串,我只需要确保我的DataTable具有相同的列数且列名匹配)。

        DataTable dt = new DataTable();
        DataColumn dc = dt.Columns.Add();
        dc.ColumnName = "DataColumn1";

        dc = dt.Columns.Add();
        dc.ColumnName = "DataColumn2";

        dt.Rows.Add(new object[] { "Frank", 32 });

        this.reportViewer1.LocalReport.DataSources.Clear();
        this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1_DataTable1", dt));

        this.reportViewer1.RefreshReport();  

在运行时,ReportViewer将此DataTable作为其数据源加载并使用它来填充表。

这就是你追求的目标吗?