Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ASP.NET GridView、RDLC打印多个报告?_C#_Asp.net_Gridview_Reportviewer_Rdlc - Fatal编程技术网

C# 如何使用ASP.NET GridView、RDLC打印多个报告?

C# 如何使用ASP.NET GridView、RDLC打印多个报告?,c#,asp.net,gridview,reportviewer,rdlc,C#,Asp.net,Gridview,Reportviewer,Rdlc,我想打印基于GridView复选框的报告。如果选择了3行,则应该有3个报告。我的代码是这样的 protected void btn_Print_Click(object sender, EventArgs e) { if (IsPostBack) { try { foreach (GridViewRow gvr in grdRV.Rows) {

我想打印基于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);
    }
受保护的无效btn\u打印\u单击(对象发送者,事件参数e)
{
如果(iPostBack)
{
尝试
{
foreach(grdRV.Rows中的GridViewRow gvr)
{
RadioButton rbID=(RadioButton)gvr.FindControl(“rbID”)作为RadioButton;
如果(rbID!=null&&rbID.Checked)
{
字符串sID=grdRV.DataKeys[gvr.RowIndex].Value.ToString().Trim();
如果(rbl_Print.SelectedValue==“0”)
{
SMTP(sID);
}
否则如果(rbl_Print.SelectedValue==“1”)
{
材料(sID);
}
}
}
}
捕获(例外情况除外)
{
会话[“错误”]=例如消息;
重定向(“MessageBoard.aspx”);
}
}
}
专用void材质(字符串sID)
{            
字符串querystring=“../pmis/Reports/RptRFQMatV.aspx?RFQNo=“+lblRFQNo.Text.ToString()+”&ID=“+sID;
随机r=新随机();
字符串脚本=”;
脚本+=“”;
Script++=“confirmWin=window.open”(“+querystring+”,“+r.Next()+”,“scrollbars=yes,resizeable=1,width=960,height=500,left=50,top=130,status”);
脚本+=“confirmWin.Setfocus()”;
//RegisterStartupScript(typeof(string),“PopupScript”,“PopupWindow”);
如果(!ClientScript.IsClientScriptBlockRegistered(“PopupWindow”))
RegisterClientScriptBlock(typeof(string),“PopupWindow”,Script);
}

…但目前此代码只能打印最后一行。

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

Script += "<script language=JavaScript id='PopupWindow'>";
接下来的几行在for循环之外

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

        //ClientScript.RegisterStartupScript(typeof(string), "PopupScript", "PopupWindow");
        if (!ClientScript.IsClientScriptBlockRegistered("PopupWindow"))
            ClientScript.RegisterClientScriptBlock(typeof(string), "PopupWindow", Script);
Script+=“confirmWin.Setfocus()”;
//RegisterStartupScript(typeof(string),“PopupScript”,“PopupWindow”);
如果(!ClientScript.IsClientScriptBlockRegistered(“PopupWindow”))
RegisterClientScriptBlock(typeof(string),“PopupWindow”,Script);
这是我的例子,很有效。另外,如果使用StringBuilder而不是字符串,效果会更好+=

        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);
string脚本=”“;
脚本+=“”;
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,resizeable=1,width=960,height=500,left=50,top=130,status');”;
脚本+=“”;
如果(!ClientScript.IsClientScriptBlockRegistered(“PopupWindow”))
RegisterClientScriptBlock(typeof(string),“PopupWindow”,Script);

希望这有帮助。

在代码中设置断点时会发生什么?为什么它没有捕捉到您期望的3行?@p.campbell:假设我检查了3行,我将有3个ID。例如:A0031、A0027、A0051。因此,首先A0031进入材料块,完成A0027后,再进入A0051。所以报告只针对A0051。另外两个身份证没有出来。可能是覆盖之类的…@CMMaung:我的例子是使用静态数据,因为它是概念证明。如果你读了我的例子上面的说明,我想你应该没问题。我不明白如果在整个循环完成时打开窗口有什么关系,因为这段代码在服务器端执行,并且在响应最终到达客户端时总是一次性打开窗口。也许我没有完全理解你的要求。
        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);