2015-10-26 1 views
1

Я пытаюсь создать параметризованный отчет, используя две таблицы данных в одном наборе данных, это потому, что в первом datatable я получаю все записи и отображаю их на но когда пользователь вводит параметр даты и даты и фильтр щелчка, я хотел бы, чтобы отчет изменился на другой тип данных, который принимает параметры.Экземпляр источника данных не был предоставлен для источника данных rdlc report

Что appreas на странице загрузки:

enter image description here

я выполнил выше с этим кодом

 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 }); 

, но я не знаю хочу, чтобы это сделать, как это вместо того, чтобы я хотел бы передать параметры в отчет с помощью DataTable в наборе данных, а затем назначить, который имеет источник для отчета, но когда я сделал, что я получаю эту ошибку:

A data source instance has not been supplied for the data source 'NetWeightIolaDataSet_Net_Weight_Tracking1'. 

моих Набор данных:

enter image description here

так на дисплее загрузки страницы все данные, используя DataTable без каких-либо параметров, но когда диапазон дат обеспечивается и при нажатии кнопки фильтра щелкнул использовать другой DataTable в качестве источника отчета:

это код для передачи значения из текстового поля и заполнение DataTable с параметром:

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; 

ответ

0

Так я в конечном итоге создание хранимой процедуры и сказал, что если параметры равны нулю, то дайте мне все записи, если они имеют значение, запускающее другой код, и все создали кнопку и назвали ее 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 
-2

сделать это весело =>ReportViewer1.LocalReport.DataSources.Clear(); до этого не после как это

ReportViewer1.LocalReport.DataSources.Clear(); 
ReportDataSource("NetWeightIolaDataSet_Net_Weight_Tracking", table);