打印Gridview

时间:2014-06-10 14:04:06

标签: c# css asp.net gridview

打印我的Gridview我使用了以下事件Button_Print_Click。下面是我的代码:

private void Button_Print_Click(object sender, EventArgs e)
{
    GridView1.PagerSettings.Visible = false;
    GridView1.DataSource = DataLoad();
    GridView1.DataBind();
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView1.RenderControl(hw);
    string gridHTML = sw.ToString().Replace("\"", "'").Replace(System.Environment.NewLine, "");
    StringBuilder sb = new StringBuilder();
    sb.Append("<script type = 'text/javascript'>");
    sb.Append("window.onload = new function(){");
    sb.Append("var printWin = window.open('', '', 'left=0");
    sb.Append(",top=0,width=1000,height=600,status=0');");
    sb.Append("printWin.document.write(\"");
    sb.Append(gridHTML);
    sb.Append("\");");
    sb.Append("printWin.document.close();");
    sb.Append("printWin.focus();");
    sb.Append("printWin.print();");
    sb.Append("printWin.close();};");
    sb.Append("</script>");
    ClientScript.RegisterStartupScript(this.GetType(), "GridPrint", sb.ToString());
    GridView1.DataSource = DataLoad();
    GridView1.DataBind();
}

但是通过关注页面,它不会显示css属性。例如,我的GridViewHeader文本字体看起来很简单,但不是粗体!!代码有什么问题吗?为什么我不打印原始的CSS样式页面?

请帮助谢谢。

1 个答案:

答案 0 :(得分:0)

问题是你使用window.open()调用弹出窗口,这个弹出窗口打开一个新的HTML页面,即使你在其中注入javascript生成的HMTL,它也没有任何引用你的CSS文件。 尝试在字符串输出中添加一个链接

sb.Append("printWin.document.write(\"");
sb.Append("<link rel='stylesheet' type='text/css' href='...your.css'>")
sb.Append(gridHTML);

请注意,打印html页面真是一种奇怪的方式,我会发现使用@media规则为此生成额外的Print CSS更简单,并在同一页面上调用javascript print():参见例如http://edutechwiki.unige.ch/en/CSS_for_print_tutorial