我使用Wpf查看使用报表查看器的某些报表..我使用sql报表生成器设计了一个报表' ReportByTopic.rdl'将它添加到解决方案中...名为' Dataset1'的rdl文件中的DataSet。并且有三个参数@TopicId,@ SDate,@ EDate 测试了查询并且工作正常
我正在尝试将过滤数据加载到ReportViewer中,但没有查看数据
这里是代码
private void reportViewer_load()
{
ReportParameter[] Params = new ReportParameters[3];
Params[0] = new ReportParameter("TopicId", "4");
Params[1] = new ReportParameter("SDate", "2009-01-01");
Params[2] = new ReportParameter("EDate", "2017-01-01");
ReportDataSource rds = new ReportDataSource();
rds.Name = "DataSet1";
reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl";
reportViewer.LocalReport.DataSource.Add(rds)
reportViewer.LocalReport.SetParameters(Params);
reportViewer.Refresh();
}
所以我哪里出错了
更新
根据答案,我对上面的代码做了一些修改。首先,我使用了一种方法' GetData'它使用我用来设计rdl文件的相同查询返回我需要的所有数据的数据表。 编辑过的代码
private void reportViewer_load()
{
ReportParameter[] Params = new ReportParameters[3];
Params[0] = new ReportParameter("TopicId", "4");
Params[1] = new ReportParameter("SDate", "2009-01-01");
Params[2] = new ReportParameter("EDate", "2017-01-01");
ReportDataSource rds = new ReportDataSource("DataSet1", GetData());
reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl";
reportViewer.LocalReport.DataSource.Add(rds)
reportViewer.LocalReport.SetParameters(Params);
reportViewer.Refresh();
}
数据表被900行正确填充,但是reportViewer仍然没有
答案 0 :(得分:1)
当创建ReportDataSource将DataSet名称和数据传递给其构造函数时,您省略了将数据传递给报表:
IEnumerable data = GetFromDataBase(...);
ReportDataSource rds = new ReportDataSource("DataSet1",data);
reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl";
reportViewer.LocalReport.DataSource.Add(rds)
查看ReportDataSource构造函数以获取更多详细信息。
更新:
从您的更新中我发现了一个问题。当您确实要调用 RefreshReport 时,您正在调用控件基类的 Refresh 方法。它们用于两种不同的东西。所以你的最后四行需要替换为:
reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl";
reportViewer.LocalReport.DataSources.Clear() //Added line
reportViewer.LocalReport.DataSource.Add(rds)
reportViewer.LocalReport.SetParameters(Params);
reportViewer.RefreshReport(); //Replaced line
请注意,在设置数据源之前,我首先调用 清除 方法。当您想要在不关闭报告的情况下重新加载/刷新报告时,这非常有用。