【问题标题】:Report Viewer multiple Datasets报表查看器多个数据集
【发布时间】:2016-11-05 21:07:44
【问题描述】:

我有一个应该显示报表查看器的 Web 应用程序。这是我的步骤:

1) 将脚本管理器和报表查看器添加到新的 Web 表单

2) 添加报表并将其绑定到名为 dataset1 的数据集

3) 为查询创建参数

4) 为网络表单编写代码...

   private DataTable GetData(Int64 id_doc)
    {
        DataTable dt = new DataTable();
        string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringloginDb"].ConnectionString;
        try
        {
            using (var conn = new MySqlConnection(connStr))
            {
                string sSQL = "select * from details_doc where id_doc=@id_doc";
                MySqlCommand cmd = new MySqlCommand(sSQL, conn);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new MySqlParameter("@id_doc", Session["id_doc"].ToString()));
                MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
                adp.Fill(dt);
            }
        }
        catch (Exception)
        {
            throw;
        }
        return dt;
    }

    protected void showReport()
    {
        DataTable dt = GetData(Convert.ToInt64(Session["id_doc"].ToString()));
        rptViewer.LocalReport.Refresh();
        rptViewer.Reset();
        rptViewer.LocalReport.EnableExternalImages = true;
        this.rptViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
        ReportDataSource rds = new ReportDataSource("DataSet1", dt);
        rptViewer.LocalReport.DataSources.Add(rds);
        rptViewer.LocalReport.ReportPath = "ReportInvoice.rdlc";
        ReportParameter rptParam = new ReportParameter("ReportParameter1", Session["id_doc"].ToString());
        rptViewer.LocalReport.SetParameters(rptParam);
        rptViewer.LocalReport.Refresh();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack){
            if (Session["id_doc"] != null)
            {
                GetData(Convert.ToInt64(Session["id_doc"]));
                mostraReport();
            }
        }
    }

现在代码工作得很好,但我需要报告显示另一个,第二个表。我将添加另一个数据集和另一个报告参数,但后来我被代码卡住了。任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net dataset reportviewer multiple-tables


    【解决方案1】:

    我最终设法为我的报表查看器传递了两个参数。方法如下:

    1. 在设计模式下添加表格适配器。
    2. 拖放您需要的表格。
    3. 按使用 SQL 指令,按查询生成器并粘贴您的查询 那里。在“Where”条件下指定:WHERE (h.id_doc = @par1) AND (h.id_client= @par2)
    4. 在报表查看器中添加您的两个参数
    5. 设计您的 report.rdlc
    6. 编写代码隐藏

    private DataTable GetData(Int64 id_doc)
        {
    
            DataTable dt = new DataTable();
            string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringloginDb"].ConnectionString;
            try
            {
                using (var conn = new MySqlConnection(connStr))
                {
                    string sSQL = "SELECT c.*, users.*, t.*, d.* FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client INNER JOIN users ON h.id_user = users.id_user WHERE (h.id_doc = @par1) AND (h.id_client = @par2)";
                    MySqlCommand cmd = new MySqlCommand(sSQL, conn);
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add(new MySqlParameter("@par1", Session["id_doc"].ToString()));
                    cmd.Parameters.Add(new MySqlParameter("@par2", Session["id_client"].ToString()));
                    MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
                    adp.Fill(dt);
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
            }
            return dt;
        }
    
        protected void showReport()
        {
            DataTable DataTable1 = GetData(Convert.ToInt64(Session["id_doc"].ToString()));
            report.LocalReport.Refresh();
            report.Reset();
            report.LocalReport.EnableExternalImages = true;
            this.report.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
            //Aggiunta dataset
            ReportDataSource rds2 = new ReportDataSource("DataSet2", DataTable1);
            report.LocalReport.DataSources.Add(rds2);
            //Path
            report.LocalReport.ReportPath = "ReportFatture.rdlc";
            //Parameters
            ReportParameter rptParam = new ReportParameter("par1", Session["id_doc"].ToString());
            ReportParameter rptParam2 = new ReportParameter("par2", Session["id_client"].ToString());
            report.LocalReport.SetParameters(rptParam);
            report.LocalReport.SetParameters(rptParam2);
            report.LocalReport.Refresh();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
    
                if ((Session["id_doc"] != null) && (Session["id_client"] != null))
                {
                    showReport();
                }
                else
                {
                    Response.Redirect("/Pages/Account/Whops.aspx");
                }
            }
        }
    

    我希望这会有所帮助。谢谢。

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多