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:
- Je mis
reportName
(string) le nom de RDLC physique. - Je mis la
dataSource
(string) comme nom DataSource - Je remplirai un DataTable générique avec les données du rapport à exécuter depuis.
- Faire le ReportViewer visible
- Régler le
LocalReport.ReportPath = "Reports\\" = reportName;
- Effacer la
LocalReport.DataSources.Clear()
- Ajouter la nouvelle
LocalReport.DataSources.Add(new ReportDataSource(dataSource, dt));
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?