我是ssrs的子报告部分的新手。我已经设置了一些与标准表和矩阵和Tablix控件一起使用的代码,但是无法加载子报表。我一直都是这样的
是否有人使用Visual Studio 2010的子报表示例代码?
错误消息“子报告的数据检索失败”。
我的代码看起来像这样,虽然我尝试了一些不同的方案来尝试将数据传递到子报表。
private void LoadReport(string reportName)
{
reportViewer1.Clear();
//http://social.msdn.microsoft.com/Forums/en/vsreportcontrols/thread/b039e765-3cc8-43ec-ae67-14b9656bc981
reportViewer1.Reset();
// Set Processing Mode
reportViewer1.ProcessingMode = ProcessingMode.Local;
// Set RDL file
reportViewer1.LocalReport.ReportPath = reportName+".rdlc";
}
public void LoadReport(IEnumerable products, string reportName, string dataSourceName)
{
LoadReport(reportName);
ReportParameter myParam = new ReportParameter("ReportParameter1", st.ToString() + " TO " + et.ToString());
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { myParam });
reportViewer1.LocalReport.DataSources.Add(
new ReportDataSource(dataSourceName, products));
reportViewer1.LocalReport.DataSources.Add(
new ReportDataSource(dataSourceName+"Subreport", products));
// Process and render the report
reportViewer1.RefreshReport();
}
private void LoadReport(string reportName)
{
reportViewer1.Clear();
//http://social.msdn.microsoft.com/Forums/en/vsreportcontrols/thread/b039e765-3cc8-43ec-ae67-14b9656bc981
reportViewer1.Reset();
// Set Processing Mode
reportViewer1.ProcessingMode = ProcessingMode.Local;
// Set RDL file
reportViewer1.LocalReport.ReportPath = reportName+".rdlc";
}
public void LoadReport(IEnumerable products, string reportName, string dataSourceName)
{
LoadReport(reportName);
ReportParameter myParam = new ReportParameter("ReportParameter1", st.ToString() + " TO " + et.ToString());
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { myParam });
reportViewer1.LocalReport.DataSources.Add(
new ReportDataSource(dataSourceName, products));
reportViewer1.LocalReport.DataSources.Add(
new ReportDataSource(dataSourceName+"Subreport", products));
// Process and render the report
reportViewer1.RefreshReport();
}
答案 0 :(得分:3)
非常感谢!!!
我确实有这个代码,但我在表单设计器中添加了事件,我通过GUI事件属性窗口添加了东西
按照你的例子我移动了这一行
reportViewer1.LocalReport.SubreportProcessing + = new Microsoft.Reporting.WinForms.SubreportProcessingEventHandler(this.reportViewer1_suberport1);
从form.designer.cs到刷新报告之后,就像你在你的例子中所做的那样,现在就可以了!
谢谢你真棒的感恩节,谢谢
reportViewer1.RefreshReport();
reportViewer1.LocalReport.SubreportProcessing += new Microsoft.Reporting.WinForms.SubreportProcessingEventHandler(this.reportViewer1_suberport1);
private void reportViewer1_suberport1(object sender, SubreportProcessingEventArgs e)
{
ReportDataSource r=reportViewer1.LocalReport.DataSources[0];
e.DataSources.Add(r);
}
private void reportViewer1_suberport1(object sender, SubreportProcessingEventArgs e)
{
ReportDataSource r=reportViewer1.LocalReport.DataSources[0];
e.DataSources.Add(r);
}
答案 1 :(得分:1)
我没有发现将事件处理程序移动到另一个位置有助于此特定错误。对于这个错误,解决了什么问题,你必须确保子报表可以无错误地运行。然后,将其与主报告联系起来。就我而言,我的报告在IDE中使用的是不同于我在代码中提供的数据集。