1

我是使用报表查看器控件的新手。

我目前创建报告的方式是调用存储过程并插入输入参数来查询数据库中的表并返回行列表。

将行插入数据表并返回数据表。

数据表绑定到用户可以查看的gridview。

现在我的问题....

我想使用报表查看器而不是网格视图来显示数据,以便用户可以轻松导出数据并使用它查看漂亮的图表。

存储过程是从我的数据访问类中调用的,它只是我项目中的一个类(它不在文件夹中)。

当我去创建一个报表查看器并被要求提供我的数据源时,我的数据访问类没有出现。如何从存储过程函数中获取结果(返回的数据表)以插入到报表查看器中?

4

2 回答 2

1

您可以尝试程序化方法,

//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();

如果您有一个包含数据的 DataTable,您只需将其作为 DataSource 添加到 ReportViewer。“DataSet1”是当前加载到报表查看器中的报表中数据集的名称。

因此,如果您使用的是实体框架,它将是这样的。

//Create Connection.
Entities db = new Entities();

//Get the Data Using the query supplied (Where Entities.SomeObject is the Entity to retrieve data).
IQueryable<Object> data = db.CreateQuery<Object>("SELECT VALUE c FROM Entities.SomeObject AS c WHERE c.SomeValue> 0");

//Reset Control. Doesn't Usually work if this is skipped for some reason.
ReportViewer1.Reset();
//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();

同样适用于 DataTable。

于 2012-11-07T20:35:59.073 回答
0

为了让报表查看器访问我的数据表,我最终所做的是将数据集添加到我的项目中。在该数据集中,我必须创建一个与我的代码生成的数据表具有相同列名的数据表。从那里我去我的报告并添加一个表格并将其指向在数据集中创建的数据表。然后在我的代码中,我使用上述来自 Shelby 的代码以编程方式添加了数据表。

于 2012-11-08T18:47:16.217 回答