Экземпляр источника данных не был предоставлен для отчета rdlc источника данных
Я пытаюсь создать параметризованный отчет, используя две таблицы данных в одном наборе данных, это потому, что в первой таблице данных я получаю все записи и отображаю их в событии загрузки страницы, но когда пользователь вводит параметр от даты и до даты и нажимает Фильтр я хотел бы, чтобы отчет изменился на другую таблицу данных, которая принимает параметры.
Какие оценки при загрузке страницы:
я выполнил вышеупомянутое с этим кодом
if (Page.IsPostBack == false)
{
NetWeightIolaDataSet.Net_Weight_Tracking1DataTable table = new NetWeightIolaDataSet.Net_Weight_Tracking1DataTable();
NetWeightIolaDataSetTableAdapters.Net_Weight_Tracking1TableAdapter adpt =
new NetWeightIolaDataSetTableAdapters.Net_Weight_Tracking1TableAdapter();
adpt.Fill(table);
ReportDataSource rds = new ReportDataSource("NetWeightIolaDataSet_Net_Weight_Tracking1", table);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
ReportViewer1.Visible = true;
}
я могу получить параметры для работы с отчетом, если я использую этот код и добавлю параметры в отчет:
//ReportParameter param = new ReportParameter("fromdate", fromdate.Text);
//this.ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { param });
//ReportParameter paramm = new ReportParameter("todate", todate.Text);
//this.ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { paramm });
но я не хочу делать это так, вместо этого я хотел бы передать параметры в отчет через набор данных в наборе данных, а затем назначить источник отчета, но когда я это сделал, я получаю эту ошибку:
A data source instance has not been supplied for the data source 'NetWeightIolaDataSet_Net_Weight_Tracking1'.
мой набор данных:
поэтому при загрузке страницы отображаются все данные с использованием таблицы данных без параметров, но когда указан диапазон дат и когда нажата кнопка фильтра, используйте другой источник данных в качестве источника отчета:
это код для передачи значения из текстового поля и заполнения таблицы данных параметром:
NetWeightIolaDataSet.Net_Weight_TrackingDataTable table = new NetWeightIolaDataSet.Net_Weight_TrackingDataTable();
NetWeightIolaDataSetTableAdapters.Net_Weight_TrackingTableAdapter adpt = new NetWeightIolaDataSetTableAdapters.Net_Weight_TrackingTableAdapter();
adpt.Fill(table, DateTime.Parse(fromdate.Text), DateTime.Parse(todate.Text));
ReportDataSource rds = new ReportDataSource("NetWeightIolaDataSet_Net_Weight_Tracking", table);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
ReportViewer1.Visible = true;
2 ответа
Итак, я закончил тем, что создал хранимую процедуру и сказал, что, если параметры равны нулю, тогда дайте мне все записи, если они имеют значение, запустите другой код, и все создали кнопку и назвали ее AllData, это вернет все записи пользователю в любой точке время.
Create PROCEDURE [dbo].[filter]
(
@mindate DateTime = NULL,
@maxdate DateTime = NULL
)
AS
BEGIN
IF ISNULL(@mindate,'')<>'' AND ISNULL(@maxdate,'')<>''
BEGIN
SELECT Date, MIN(Date) AS mindate,MAX(Date) AS maxdate, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], Shift, [Rotation Code], BBD, [Operator Name], Supervisor, [Production Line], [Bagger Number], [Start Time], [Stop Time], [Under Counts], [Label Wt on Pkg (g)], [Machine Tare Wt (g)], [Actual Tare Wt (g)], [Verify Target Wt (g)], [Total Count (Proper)], [Mean Gross (g)], [Rptd Mean Net (g)], [Std Dev (g)], [Max (g)], [Min (g)], [TNE (g)], Comments, Field1, Field2, Field3
FROM [Net Weight Tracking]
GROUP BY Date, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], Shift, [Rotation Code], BBD, [Operator Name], Supervisor, [Production Line], [Bagger Number], [Start Time], [Stop Time],
[Under Counts], [Label Wt on Pkg (g)], [Machine Tare Wt (g)], [Actual Tare Wt (g)], [Verify Target Wt (g)], [Total Count (Proper)], [Mean Gross (g)], [Rptd Mean Net (g)], [Std Dev (g)], [Max (g)], [Min (g)], [TNE (g)],
Comments, Field1, Field2, Field3
HAVING (MIN(Date) >= @mindate) AND (MAX(Date) <= @maxdate)
END
ELSE
BEGIN
SELECT Date, CONVERT(varchar(10), MIN(Date), 101) AS mindate, CONVERT(varchar(10), MAX(Date), 101) AS maxdate, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], Shift, [Rotation Code], BBD,
[Operator Name], Supervisor, [Production Line], [Bagger Number], [Start Time], [Stop Time], [Under Counts], [Label Wt on Pkg (g)], [Machine Tare Wt (g)], [Actual Tare Wt (g)], [Verify Target Wt (g)], [Total Count (Proper)], [Mean Gross (g)], [Rptd Mean Net (g)], [Std Dev (g)], [Max (g)], [Min (g)], [TNE (g)], Comments, Field1, Field2, Field3
FROM [Net Weight Tracking]
GROUP BY Date, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], Shift, [Rotation Code], BBD, [Operator Name], Supervisor, [Production Line], [Bagger Number], [Start Time], [Stop Time],
[Under Counts], [Label Wt on Pkg (g)], [Machine Tare Wt (g)], [Actual Tare Wt (g)], [Verify Target Wt (g)], [Total Count (Proper)], [Mean Gross (g)], [Rptd Mean Net (g)], [Std Dev (g)], [Max (g)], [Min (g)], [TNE (g)],
Comments, Field1, Field2, Field3
END
END
Делай это весело => ReportViewer1.LocalReport.DataSources.Clear();
до этого не после того
ReportViewer1.LocalReport.DataSources.Clear();
ReportDataSource("NetWeightIolaDataSet_Net_Weight_Tracking", table);