我正在尝试使用一个数据集中的两个数据表创建参数化报告,这是因为在第一个数据表中,我正在获取所有记录并将其显示在页面加载事件中,但是当用户输入起始日期和截止日期参数并单击时过滤器我希望报告更改为接受参数的其他数据表。
页面加载时的应用:
我用这段代码完成了上述工作
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;