gpt4 book ai didi

c# - 如何通过自定义打印窗口打印完整的 gridview 区域?

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:09 25 4
gpt4 key购买 nike

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

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

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

这是打印按钮的 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();


}

最佳答案

如果网格的宽度那么大,默认情况下您无法将其全部打印在同一页中...

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

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

这只是一个例子,我不知道你在打印什么,但是,不要将客户的所有字段都放在一行中,而是将它们分组为:

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) | ...

然后您可以使用 table-printclass 装饰该表,其中:

<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帮助用户禁用他们不想打印的内容...

关于c# - 如何通过自定义打印窗口打印完整的 gridview 区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com