2010-05-17 123 views
3

我已經創建了一個winform,供用戶查看查看我爲他們創建的許多報告。我有一個下拉列表與報告名稱觸發適當的領域來顯示參數。一旦這些填充完畢,他們按提交併出現報告。這是他們第一次點擊屏幕。他們可以更改參數,ReportViewer可以正常工作。切換到不同的報表,而我得到以下的ReportViewer錯誤:在WinForms的ReportViewer中切換數據源

An error occurred during local report processing. 
An error has occurred during the report processing. 
A data source instance has not been supplied for the data source "CgTempData_BusMaintenance". 

至於我在使用的過程:

  1. 我設置reportName(串)的物理RDLC名。
  2. 我將dataSource(字符串)設置爲數據源名稱
  3. 我使用要運行的報表的數據填充通用DataTable。
  4. 製作中的ReportViewer可見
  5. 設置LocalReport.ReportPath = "Reports\\" = reportName;
  6. 清除LocalReport.DataSources.Clear()
  7. 添加新LocalReport.DataSources.Add(new ReportDataSource(dataSource, dt));
  8. RefreshReport()上的ReportViewer。

這裏是設置並顯示的ReportViewer的代碼部分:

/// <summary> 
/// Builds the report. 
/// </summary> 
private void BuildReport() 
{ 
    DataTable dt = null; 
    ReportingCG rcg = new ReportingCG(); 

    if (reportName == "GasUsedReport.rdlc") 
    { 
     dataSource = "CgTempData_FuelLog"; 
     CgTempData.FuelLogDataTable DtFuelLog = rcg.BuildFuelUsedTable(fromDate, toDate); 
     dt = DtFuelLog; 
    } 
    else if (reportName == "InventoryCost.rdlc") 
    { 
     CgTempData.InventoryUsedDataTable DtInventory; 
     dataSource = "CgTempData_InventoryUsed"; 
     DtInventory = rcg.BuildInventoryUsedTable(fromDate, toDate); 
     dt = DtInventory; 
    } 
    else if (reportName == "VehicleMasterList.rdlc") 
    { 
     dataSource = "CgTempData_VehicleMaster"; 
     CgTempData.VehicleMasterDataTable DtVehicleMaster = rcg.BuildVehicleMasterTable(); 
     dt = DtVehicleMaster; 
    } 
    else if (reportName == "BusCosts.rdlc") 
    { 
     dataSource = "CgTempData_BusMaintenance"; 
     dt = rcg.BuildBusCostsTable(fromDate, toDate); 
    } 

    // Setup the DataSource 
    this.reportViewer1.Visible = true; 
    this.reportViewer1.LocalReport.ReportPath = "Reports\\" + reportName; 
    this.reportViewer1.LocalReport.DataSources.Clear(); 
    this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(dataSource, dt)); 
    this.reportViewer1.RefreshReport(); 
} 

任何想法如何刪除所有剩餘的舊數據的?我是否處理該對象並重新創建它?

回答

2

我想通了。我需要在該方法的開頭添加:reportViewer1.Reset();