今天遇到页面局部打印,经过一番努力,终于成了,分享一下。
protected void Page_Load(object sender, EventArgs e)
{
//绑定数据
this.GridView1.DataSource = 数据源;
GridView1.DataBind();
Label1.Text = DateTime.Now.ToShortDateString();
}
/// <summary>
/// 打印方法
/// </summary>
/// <param name="control">控件ID</param>
public static void PrintWebControl(Control control)
{
PrintWebControl(control, string.Empty);
}
/// <summary>
/// 打印方法
/// </summary>
/// <param name="control">控件ID</param>
/// <param name="Script"></param>
public static void PrintWebControl(Control control, string Script)
{
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWrite);
if (control is WebControl)
{
Unit w = new Unit(100, UnitType.Percentage);
((WebControl)control).Width = w;
}
Page pg = new Page();
pg.EnableEventValidation = false;
if (Script != string.Empty)
{
pg.ClientScript.RegisterStartupScript(pg.GetType(), "PrintJavaScipt", Script);
}
HtmlForm frm = new HtmlForm();
pg.Controls.Add(frm);
frm.Attributes.Add("runat", "server");
frm.Controls.Add(control);
pg.RenderControl(htmlWriter);
string strHTML = stringWrite.ToString();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write(strHTML);
HttpContext.Current.Response.Write("<script>window.print();</script>");
HttpContext.Current.Response.End();
}
/// <summary>
/// 打印按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnPrit_Click(object sender, EventArgs e)
{
PrintWebControl(this.Panel1);
}
/// <summary>
/// 重载,否则出现“类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标... ”的错误
/// </summary>
/// <param name="control"></param>
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}
如果报RegisterForEventValidation can only be called during Render()错误,请修改<%@ Page Language=”C#” AutoEventWireup=”true” EnableEventValidation=”false” CodeBehind=”AA.aspx.cs” Inherits=”AA” %>