【问题标题】:How to print multiple reports using ASP.NET GridView, RDLC?如何使用 ASP.NET GridView、RDLC 打印多个报表?
【发布时间】:2020-05-01 04:01:05
【问题描述】:

我想打印基于 GridView 复选框的报告。如果选择了 3 行,则应该有 3 个报告。我的代码是这样的……

protected void btn_Print_Click(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            try
            {
                foreach (GridViewRow gvr in grdRV.Rows)
                {
                    RadioButton rbID = (RadioButton)gvr.FindControl("rbID") as RadioButton;

                    if (rbID != null && rbID.Checked)
                    {
                        string sID = grdRV.DataKeys[gvr.RowIndex].Value.ToString().Trim();

                        if (rbl_Print.SelectedValue == "0")
                        {
                            SMTP(sID);
                        }
                        else if (rbl_Print.SelectedValue == "1")
                        {
                            Material(sID);
                        }
                    }
                 }
            }
            catch (Exception ex)
            {
                Session["error"] = ex.Message;
                Response.Redirect("MessageBoard.aspx");
            }
        }
    }

private void Material(string sID)
    {            

        string querystring = "../pmis/Reports/RptRFQMatV.aspx?RFQNo=" + lblRFQNo.Text.ToString() + "&ID=" + sID;

        Random r = new Random();            
        string Script = "";
        Script += "<script language=JavaScript id='PopupWindow'>";
        Script += "confirmWin = window.open(' " + querystring + "','" + r.Next() + "','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');";
        Script += "confirmWin.Setfocus()</script>";

        //ClientScript.RegisterStartupScript(typeof(string), "PopupScript", "PopupWindow");
        if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow"))
            ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script);
    }

...但目前此代码只能打印报告最后一行。

【问题讨论】:

  • 在这段代码中设置断点会发生什么?为什么它没有捕捉到您期望的 3?
  • @p.campbell:假设我检查了 3 行,我将有 3 个 ID。例如:A0031、A0027、A0051。所以首先 A0031 进入材料块,完成 A0027 后,然后是 A0051。所以报告只针对 A0051。其他两个ID没有出来。可能被覆盖什么的......

标签: c# asp.net gridview reportviewer rdlc


【解决方案1】:

我对此进行了测试,它确实打开了三个窗口,您必须通过将选定 ID 列表传递给 Material 来对其进行一些调整,以便您只调用一次 Material。在您的字符串操作中的内部材料,在以下行之后,

Script += "<script language=JavaScript id='PopupWindow'>";

添加一个遍历选定 ID 的 for 循环并添加一个 window.open。因此,以下几行应该在 for/foreach 循环中

string querystring = "../pmis/Reports/RptRFQMatV.aspx?RFQNo=" + lblRFQNo.Text.ToString() + "&ID=" + sID;


Script += "confirmWin = window.open(' " + querystring + "','" + r.Next() + "','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');";

然后下面几行位于 for 循环之外。

Script += "confirmWin.Setfocus()</script>";

        //ClientScript.RegisterStartupScript(typeof(string), "PopupScript", "PopupWindow");
        if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow"))
            ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script);

这是我的示例并且有效。另外,如果您使用 StringBuilder 而不是 string +=

会更好
        string Script = "";
        Script += "<script language=JavaScript id='PopupWindow'>";
        Script += "window.open('www.google.com.au', '1','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');";
        Script += "window.open('www.yahoo.com','2','scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');";
        Script += "window.open('www.stackoverflow.com','3', 'scrollbars=yes,resizable=1, width=960,height=500,left=50,top=130,status');";
        Script += "</script>";

        if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow"))
            ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script);

希望这会有所帮助。

【讨论】:

  • @CMMaung:我的示例是使用静态数据,因为它是概念证明。如果您阅读了我在示例上方的说明,我认为您应该没问题。而且我不明白当整个循环完成时打开窗口有什么关系,因为这段代码执行服务器端并且总是在响应最终到达客户端时一次性打开窗口。也许我没有完全理解你的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多