动态报表构建Refresh()不会更改数据

时间:2014-03-25 12:37:13

标签: c# asp.net sqldatasource

我正在尝试从代码后面动态查看报告。但是当参数从页面中添加的动态文本框更改时。在报告refresh()中,数据不会更改。

我在!IsPostback中调用sqlDS()和reportBuild()。

此方法用于定义sqlDatasource:

    protected void sqlDS()
    {
        string conString, prName = "";
        int counter = 0;
        Reporting rep = new Reporting();
        rep = rep.searchReport(repID_HF.Value);

        Reporting repFold = new Reporting();
        repFold = repFold.searchFolder(foldID_HF.Value);

        if (repFold.FolderName.Split('(')[1] == "Web Reports)")
        {
            conString = dbSql.connectionStringAll;
            prName = dbSql.providerName;
        }
        else
        {
            conString = db.connectionStringAll;
            prName = db.providerName;
        }
        SqlDataSource1.ConnectionString = conString;
        SqlDataSource1.ProviderName = prName;

        string sqlString = System.IO.File.ReadAllText(Server.MapPath("~/Reports/SQLs/" + rep.SqlFile));
        sqlString.Replace(System.Environment.NewLine, " ");


        SqlDataSource1.SelectCommand = sqlString;

        SqlDataSource1.CancelSelectOnNullParameter = false;

        Reporting repParam = new Reporting();

        allPs = repParam.getAllParamRep(rep.RepID);


        foreach (Reporting itemParam in allPs)
        {
            if (itemParam.ParamType == "Date")
            {
                SqlDataSource1.SelectParameters.Add(":" + itemParam.ParamName, itemParam.ParamDefaultValue);
                counter++;
            }
            else if (itemParam.ParamType == "Text")
            {
                SqlDataSource1.SelectParameters.Add(":" + itemParam.ParamName, itemParam.ParamDefaultValue);
                counter++;
            }
            else if (itemParam.ParamType == "Menu")
            {
                counter++;
            }
        }
    }

此方法用于声明报告属性:

    protected void reportBuild()
    {
        Reporting rep2 = new Reporting();
        rep2 = rep2.searchReport(repID_HF.Value);

        ReportViewer1.LocalReport.ReportPath = "Reports/RDLC/" + rep2.RdlcFile;
        this.ReportViewer1.LocalReport.ReportEmbeddedResource = rep2.RdlcFile;

        ReportParameter[] paramss = new ReportParameter[SqlDataSource1.SelectParameters.Count];

        for (int i = 0; i < SqlDataSource1.SelectParameters.Count; i++)
        {
            paramss[i] = new ReportParameter(SqlDataSource1.SelectParameters[i].Name.Split(':')[1], SqlDataSource1.SelectParameters[i].DefaultValue);
        }
            ReportDataSource rds = new ReportDataSource(rep2.DatasetName.Split('.')[0], SqlDataSource1);
            ReportViewer1.LocalReport.DataSources.Clear();
            ReportViewer1.LocalReport.DataSources.Add(rds);

        //paramss[0] = new ReportParameter("TDATE", SqlDataSource1.SelectParameters[0].DefaultValue);
        //paramss[1] = new ReportParameter("CUST_NUM", SqlDataSource1.SelectParameters[1].DefaultValue);
        ReportViewer1.LocalReport.SetParameters(paramss);

        ReportViewer1.LocalReport.Refresh();

    }

在reportViewer刷新方法中,我尝试根据页面中添加的动态文本框设置新参数:

    protected void ReportViewer1_ReportRefresh(object sender, System.ComponentModel.CancelEventArgs e)
    {
        foreach (Control txt in Panel1.Controls)
        {
            if (txt is TextBox)
            {
                txts.Add(txt);
            }
        }

        foreach (TextBox txtbox in txts)
        {

            Reporting repP = new Reporting();
            repP = repP.searchParam(txtbox.Attributes["pID"].ToString());
            if (repP.ParamType == "Date")
            {
                SqlDataSource1.SelectParameters[":" + repP.ParamName].DefaultValue = txtbox.Text;
            }
            else if (repP.ParamType == "Text")
            {
                SqlDataSource1.SelectParameters[":" + repP.ParamName].DefaultValue = txtbox.Text;
            }
        }

        //Reporting r = new Reporting();
        //r = r.searchReport(repID_HF.Value);


        //Reporting rep = new Reporting();
        //rep = rep.searchReport(repID_HF.Value);

        //ReportDataSource rds = new ReportDataSource(rep.DatasetName.Split('.')[0], SqlDataSource1);
        //this.ReportViewer1.Reset();
        //ReportViewer1.LocalReport.DataSources.Clear();
        //ReportViewer1.LocalReport.DataSources.Add(rds);

        ReportParameterInfoCollection x = ReportViewer1.LocalReport.GetParameters();
        //Response.Redirect(Request.RawUrl);
        ReportViewer1.LocalReport.Refresh();

    }

我试过调试,发现每个东西都正常工作,SQL参数改变了,报告参数也改变了。

那么为什么报告中的数据没有改变? Plz帮帮我

1 个答案:

答案 0 :(得分:0)

我使用此链接

可以更好,更轻松地解决此问题

http://www.igregor.net/post/2007/12/Adding-Controls-to-an-ASPNET-form-Dynamically.aspx

您可以使用字符串数组来传递属性。