Я создал winform для пользователей, чтобы просматривать многие отчеты, которые я создаю для них. У меня есть выпадающий список с именем отчета, который вызывает соответствующие поля для отображения параметров. Как только они заполнены, они нажимают Отправить, и появляется отчет. Это работает в первый раз, когда они попадают на экран. Они могут изменить параметры и ReportViewer работает нормально. Измените на другой отчет, и я получаю следующую ошибку 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".
Насколько я использую процесс:
- Я установил
reportName
(строка) физическое имя RDLC.
- Я установил
dataSource
(строку) в качестве имени источника данных
- Я заполняю универсальную таблицу данных данными для запуска отчета.
- Сделать ReportViewer видимым
- Установить
LocalReport.ReportPath = "Reports\\" = reportName;
- Очистить
LocalReport.DataSources.Clear()
- Добавить новый
LocalReport.DataSources.Add(new ReportDataSource(dataSource, dt));
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();
}
Есть идеи, как удалить все старые оставшиеся данные? Нужно ли утилизировать объект и воссоздать его?