Экземпляр источника данных не был предоставлен для отчета 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);
Другие вопросы по тегам