我不熟悉报表查看器控件的使用。
我当前创建报告的方式是调用一个存储过程并插入输入参数,以查询数据库中的表并返回一个行列表。
将行插入到数据表中,并返回数据表。
数据表被绑定到用户可以查看的网格视图。
现在我的问题..。
我想使用报表查看器来显示数据,而不是网格视图,这样用户就可以轻松地导出数据并使用它查看漂亮的图形。
存储过程是从我的数据访问类中调用的,这只是我的项目中的一个类(它不在文件夹中)。
当我去创建一个报表查看器,并被要求提供我的数据源时,我的数据访问类没有显示出来。如何从存储过程函数中获取结果(返回的数据表)以插入到报告查看器中?
发布于 2012-11-09 02:47:16
为了让报表查看器访问我的datatable,我最终所做的就是向我的项目中添加一个dataset。在该数据集中,我必须创建一个datatable,其列名与代码生成的数据表中的列名相同。从那里,我转到我的报表,添加了一个表,并将其指向在dataset中创建的datatable。然后,在我的代码中,我使用上面描述的来自Shelby的代码以编程方式添加了datatable。
发布于 2012-11-08 04:35:59
你可以尝试程序化的方法,
//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“是当前加载到报表查看器中的报表中的数据集的名称。
所以如果你使用的是Entity Framework,它会是这样的。
//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。
https://stackoverflow.com/questions/13277395
复制相似问题