Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 子报表处理事件未触发_C#_Reporting Services_Subreport - Fatal编程技术网

C# 子报表处理事件未触发

C# 子报表处理事件未触发,c#,reporting-services,subreport,C#,Reporting Services,Subreport,尝试调试时未触发子ReportProcess eventhandler SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm); dataAdapter.Fill(dataset); this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\sale_dept.rdl"; this.reportViewer1.LocalRep

尝试调试时未触发子ReportProcess eventhandler

    SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
    dataAdapter.Fill(dataset);
    this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\sale_dept.rdl";
 this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dataset.Tables[0]));
this.reportViewer1.LocalReport.SubreportProcessing +=
new SubreportProcessingEventHandler(addsubreport);
this.reportViewer1.RefreshReport();




 void addsubreport(object sender, SubreportProcessingEventArgs e)
        {

            SqlConnection conn = new SqlConnection(source);
            DataSet dataset = new DataSet();
            conn.Open();

           SqlCommand sqlcomm = new SqlCommand("subreportquery", conn);

           SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
           dataAdapter.Fill(dataset);

           e.DataSources.Add(new ReportDataSource("discount", dataset.Tables[0]));
        }

在调试模式下运行pgm时,上面的处理程序没有启动。

我发现了问题。我把它作为答案发布,因为它可能会在将来帮助别人

SubreportProcessingEventHandler将仅为.rdlc子报表触发。在我的项目中,主报表和所有子报表都是.rdl扩展名。所以我所做的唯一更改是转到命令提示符并将子报表扩展名重命名为.rdlc

例如:-ren discount.rdl discount.rdlc

然后相应地附加子报告的数据集

请参见下面的代码

SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlcomm);
dataAdapter.Fill(dataset);
this.reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\main_rpt.rdl";
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.SubreportProcessing +=
new SubreportProcessingEventHandler(addsubreport);
this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dataset.Tables[0]));
this.reportViewer1.RefreshReport();


void addsubreport(object sender, SubreportProcessingEventArgs e)
{

SqlCommand sqlcomm = new SqlCommand();
SqlDataAdapter dataAdapter = new SqlDataAdapter();
DataSet dataset = new DataSet();

Switch(e.ReportPath)
{
case "subreport1":
   sqlcomm = new SqlCommand( "Query for subreport one", conn);
   dataAdapter = new SqlDataAdapter(sqlcomm);
   dataAdapter.Fill(dataset);
   e.DataSources.Add(new ReportDataSource("DataSet for subreport1", dataset.Tables[0]));
   break;
case "subreport2":
   sqlcomm = new SqlCommand( "Query for subreport two", conn);
   dataAdapter = new SqlDataAdapter(sqlcomm);
   dataAdapter.Fill(dataset);
   e.DataSources.Add(new ReportDataSource("DataSet for subreport2", dataset.Tables[0]));
   break;
case "subreport3":
   sqlcomm = new SqlCommand( "Query for subreport three", conn);
   dataAdapter = new SqlDataAdapter(sqlcomm);
   dataAdapter.Fill(dataset);
   e.DataSources.Add(new ReportDataSource("DataSet for subreport3", dataset.Tables[0]));
   break;

 }

}
如果您有多个子报表,则需要切换。注意要点

1.所有子报告应具有扩展名.rdlc

2.如果任何参数正在传递,请确保其名称正确

  • 正确指定路径。最好将主报表和子报表放在同一文件夹中

  • 现在运行C#应用程序,它将显示主报告和所有子报告

    将子报告扩展名从.rdl重命名为.rdlc解决了问题。您可以将其作为答案发布,并将其标记为已接受。“这可能会帮助未来的用户。”阿努帕格拉瓦尔用我的解决方案回答。