尚未为数据源'DataSet2'-SSRS提供数据源实例

时间:2014-06-25 13:25:40

标签: c# asp.net reporting-services

这是我使用SSRS的第一份报告。

我正在尝试使用asp.net中的SSRS生成报告。

我的需求是:

我想创建一个包含多个表(4个表)的报表,这些表彼此有关系。我已经为每个单独的表配置了接受1个参数,例如:   enter image description here

我尝试的是:

我创建了一个包含4个表的dataset.xsd,并给出了这些表之间的关系。 然后我创建了一个report.rdlc并设计了一个包含四个表的报告,并将所需的字段拖放到表中,并创建了一个名为ID的报告参数。

我得到的错误是:

A data source instance has not been supplied for the data source 'DataSet2'

enter image description here

我在按钮点击的cs页面中写的是:

protected void BtnGo_Click(object sender, EventArgs e)
        {
            DataSet2TableAdapters.TB_TransReceiptTableAdapter ta = new DataSet2TableAdapters.TB_TransReceiptTableAdapter();
            DataSet2.TB_TransReceiptDataTable dt = new DataSet2.TB_TransReceiptDataTable();
            ta.Fill(dt,Convert.ToInt16( TxtID.Text));
            //ta.Fill(dt,TxtID.Text);
            ReportDataSource rds = new ReportDataSource();
            rds.Name = "DataSet2";
            rds.Value = dt;
            ReportParameter rp = new ReportParameter("ID", TxtID.Text.ToString());
            rptviewer.LocalReport.DataSources.Clear();
            rptviewer.LocalReport.ReportPath = "Report1.rdlc";
            rptviewer.LocalReport.SetParameters(new ReportParameter[] { rp });
            rptviewer.LocalReport.DataSources.Add(rds);
            rptviewer.LocalReport.Refresh();
            rptviewer.Visible = true;
        }

我寻求的帮助是:

我不知道如何通过代码绑定报告,因为我有四个表与外键相互关联。上面是我使用的代码,但它会引发错误。

如果有人帮我解决这个问题,我将非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据tgolisch而不是table i Bound数据集并传递给报告它工作正常。 而且我还创建了一个视图而不是四个单独的表。它使我的工作变得简单

 private DataTable getData()
        {
            DataSet dss = new DataSet();
            string sql = "";
            sql = "SELECT * from VW_TransReciptReport WHERE tREC_NUPKId='" + TxtID.Text + "'";
            SqlDataAdapter da = new SqlDataAdapter(sql, con);
            da.Fill(dss);
            DataTable dt = dss.Tables[0];
            return dt;
        }

        private void runRptViewer()
        {
            this.rptviewer.Reset();
            ReportParameter rp = new ReportParameter("ID", TxtID.Text.ToString());
            this.rptviewer.LocalReport.ReportPath = Server.MapPath("ReportReceipt.rdlc");
            rptviewer.LocalReport.SetParameters(new ReportParameter[] { rp });
            ReportDataSource rdsB = new ReportDataSource("DataSet1_VW_TransReciptReport", getData());

            this.rptviewer.LocalReport.DataSources.Clear();
            this.rptviewer.LocalReport.DataSources.Add(rdsB);

            this.rptviewer.DataBind();
            this.rptviewer.LocalReport.Refresh();
        }