2010-05-17 13 views
3

J'ai créé un winform pour que les utilisateurs puissent voir les nombreux rapports que je crée pour eux. J'ai une liste déroulante avec le nom du rapport qui déclenche les champs appropriés pour afficher les paramètres. Une fois que ceux-ci sont remplis, ils pressent Soumettre et le rapport apparaît. Cela fonctionne la première fois qu'ils frappent l'écran. Ils peuvent changer les paramètres et le ReportViewer fonctionne bien. Modifier un rapport différent, et je reçois l'erreur ReportViewer suivante:Changement de DataSources dans ReportViewer dans WinForms

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". 

En ce qui concerne le processus que je l'utilise:

  1. Je mis reportName (string) le nom de RDLC physique.
  2. Je mis la dataSource (string) comme nom DataSource
  3. Je remplirai un DataTable générique avec les données du rapport à exécuter depuis.
  4. Faire le ReportViewer visible
  5. Régler le LocalReport.ReportPath = "Reports\\" = reportName;
  6. Effacer la LocalReport.DataSources.Clear()
  7. Ajouter la nouvelle LocalReport.DataSources.Add(new ReportDataSource(dataSource, dt));
  8. RefreshReport() sur le ReportViewer.

Voici la partie du code qui Configurations de et affiche le 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(); 
} 

Toute idée comment supprimer toutes les anciennes données restantes? Est-ce que je dispose l'objet et le recréer?

Répondre

2

Je l'ai compris. J'avais besoin d'ajouter: reportViewer1.Reset(); au début de la méthode.