【问题标题】:How can I print a full gridview area via a custom print window?如何通过自定义打印窗口打印完整的 gridview 区域?
【发布时间】:2013-01-12 09:11:49
【问题描述】:

我正在创建一个自定义 GridView 数据打印窗口,该窗口旨在打印出 gridview 区域。一个按钮将打印当前窗口的网格视图,另一个按钮将打印 GridView 中的所有记录。就目前的代码而言,当单击按钮时(分别打印当前页面和所有记录),预览窗口完美地显示了 GridView 中的所有记录(23 列,包括 GridView 两侧的两个命令字段)。但是,当打印出作业时,无论我调整什么打印机或 CSS/格式设置,网格视图都会被切掉(只显示大约一半的网格)。

我遇到的两个挑战是 1)我无法以纵向或横向打印完整的 gridview 以及 2)我的 javascript 很弱。如何调整以下代码,以便在打印 gridview 时打印 FULL 网格?

如果需要更多信息,请随时询问。

这是我的 aspx 文件后面的打印按钮代码。

protected void PrintCurrentPage_Click(object sender, EventArgs e)
{
GridView1.PagerSettings.Visible = false;
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=3000,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.PagerSettings.Visible = true;
GridView1.DataBind();

}

这是打印所有记录的代码。

protected void PrintAll_Click(object sender, EventArgs e)
{
GridView1.AllowPaging = false;
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=3000,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.AllowPaging = true;
GridView1.DataBind();


}

【问题讨论】:

  • 你的意思是在两种情况下“printall”和“printCurrentPage”你只打印当前页面吗?
  • 抱歉,在这两种情况下,当单击按钮时,都会出现一个格式化的打印预览窗口(所有其他网页装饰都被剥离),该窗口仅显示完整的 GridView 区域,紧接着是操作系统“打印”窗口询问我想用什么打印机连同打印机选项一起打印。单击操作系统打印窗口中的“打印”按钮时,仅打印出一半的打印区域。
  • 我应该注意到总共有 23 列,包括 GridView 两侧的两个命令字段。
  • 在这种情况下我们通常做的实际上是有两个&lt;table&gt;,我们只使用 CSS 规则从显示中隐藏并在打印时显示...这也将更容易维护,并且无需弹出窗口(它们对用户来说非常烦人)
  • @balexandre - 今天早些时候我一直在玩 CSS 选项,但无法让任何东西正常工作。也许,我没有调整正确的设置。你能提供一个你所指的样本吗?

标签: c# javascript asp.net css gridview


【解决方案1】:

将 GridView 的方向更改为 RTL:

StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
hw.AddStyleAttribute(HtmlTextWriterStyle.Direction, "rtl");

【讨论】:

    【解决方案2】:

    如果网格的宽度那么大,则没有任何内容,默认情况下您可以将其全部打印在同一页面中...

    但是,这也不是坏消息,事实上,有几篇文章可以帮助您选择并在用户打印时以不同方式显示相同的网格。

    我看到的最好方法是在一列中显示更多信息,将它们分组到与用户相关的其他内容中,然后尝试一下...

    这只是一个示例,我不知道您在打印什么,但是,与其将客户的所有字段放在一行中,不如将它们分组为:

    Customer                  | Sales Responsible        | ...
    ------------------------------------------------------------------
    Bruno Alexandre           | Techie Joe               | ...
    My Street not yours, 56   | 43 sales this month      | ...
    DK-1400 København         | 450.000€ per sale (avg)  | ...
    

    然后您可以使用classtable-print 来装饰该表,其中:

    <style>
    @media screen
    {
      table-print {display:none;}
    }
    @media print
    {
      table-print {display:block;}
    }
    @media screen,print
    {
      ...
    }
    </style>
    

    之后,阅读如何处理分页符:

    How to deal with page breaks when printing a large HTML table

    甚至还有Printliminator 可以帮助用户禁用他们不想打印的内容...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多