我想打印基于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);
}
...但目前这段代码只能打印最后一行的报告。
我测试了这一点,它确实打开了三个窗口,你必须调整一下,通过向Material传递一个选定的ID列表,这样你只需要调用Material一次。在你的字符串操作中的Material里面,在下面一行之后。
Script += "<script language=JavaScript id='PopupWindow'>";
添加一个for循环,通过选定的ID,并添加一个window.open.Inside的循环。因此,在forforeach循环中应该有以下几行文字
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);
希望对你有所帮助。