2015-09-04 197 views
0

的subreportprocess事件處理程序不開火時,試圖調試SubreportProcessing事件沒有觸發

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上述處理程序不點火。

+0

重命名從的.rdl子報表擴展主報告.rdlc解決問題 – Sachu

+0

您可以發佈,作爲一個答案,它標記爲公認。它可能有助於未來的用戶。 –

+1

@anupagrawal回答了我的解決方案。 – Sachu

回答

1

我發現了這個問題。我將它張貼爲答案,因爲它可能會在未來幫助某人。

SubreportProcessingEventHandler只會被觸發.rdlc子報表。在我的項目主要報告和所有子報告都是.rdl擴展名。因此,只有我做了變化去命令提示符下,並改名爲子報表擴展爲.rdlc

如: - 仁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.如果任何參數傳遞確保它也正確命名。

  1. 正確指定路徑。主報告和子報告放在同一個文件夾中最好。

現在運行的C#應用​​程序,它會顯示所有報表