如何在运行时更改/创建rldc,reportViewer对象和dataSet?

时间:2012-01-31 10:20:52

标签: c# asp.net reportviewer

我正在使用ReportViewer为我的网络应用程序创建一些报告,我想知道:

可以在不预先创建.rdlc文件的情况下使用ReportViewer ... dataSet ...以及所有内容?

我想创建这些对象的实例,在运行时设置他们的属性,不要在我的应用程序中包含太多文件(30个报告x 3个文件[dataSet,.rdlc和.aspx])

以下方法解释了我的一些难点:

protected void Page_Load(object sender,EventArgs e) {

    //getting the string connection
    string connString = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
    //estabilishing connection
    using (SqlConnection conn = new SqlConnection(connString))
    {
        string sql = @"EXEC SP_PRODUCTS"; // or another SQL command

        //opening connection
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        DataTable dte = new DataTable();

        //filling the dataTable with the command above
        adp.Fill(dte);

        //closing connection
        conn.Close();

        //defining which report the component will render
        ReportViewer1.LocalReport.ReportPath = "myReport.rdlc";

        //adding the dataSource Adicionando o data source, it's important passing the same name you defined before
        //at this moment, i didn't understood if the DataSource is being created populated by the dte datatable or
        //if it is just binding the dte datatable to an existing dataSource named "Products
        ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("Products", dte));

        //without this it wont work
        ReportViewer1.DataBind();
    }

}

如何解决这个问题? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您必须创建一个rdlc文件,但您可以做的是用您需要的列填充此rdlc,并根据您需要显示/隐藏列。您可以使用参数。这样,您只能使用一个rdlc文件。您还可以为所需的所有列定义一个对象(并只创建一个数据集),然后根据报告填充它。