【发布时间】:2019-03-06 20:51:27
【问题描述】:
我有一个带有#resultsDiv 的网页,该网页是根据后端查询对美元价值和预期数量的动态创建的,并在每个部件号的数据之间插入 CSS 分页符。 #resultsDiv 中可能有很多或只有几页,具体取决于用户设置的过滤器。它的设计使我们的库存团队可以为我们仓库中可能找到该零件的位置的每个零件编号打印一页。
我的问题是,当我单击按钮打印 div 中的页面(下面的代码)时,它只显示第一页(这是我不想打印的唯一页面)。相反,如果我右键单击并打印,则所有页面都可以打印。
我已经阅读了这些 SO 问题,并尝试了他们的大多数解决方案,但均无济于事: window.print() is not printing the whole page
window.print() only prints the “viewable” part of the screen
ScriptManager.RegisterStartupScript code not working - why?
我也尝试了这里建议的一些方法:
Advanced CSS Printing — Using CSS Page Breaks
作为参考,这里是 ScriptManager 的 MSDN 条目:
ScriptManager.RegisterStartupScript Method
这是点击处理程序:
protected void btnPrint_OnClick(object sender, EventArgs e)
{
if (!(ViewState["PartsToPrint"] is DataTable dt)) return;
DataView dv = new DataView(dt);
DataTable dtDistinctPartNumbers = dv.ToTable(true, "partNumber");
foreach (DataRow row in dtDistinctPartNumbers.Rows)
{
//pull out the data as needed from the datatable rows
string partNumber = row["partnumber"].ToString();
if (!dbf.IncrementPrintCount(GetSelectedOrganization(), partNumber))
{
setStatus(false, "Error saving print count");
}
}
ScriptManager.RegisterStartupScript(resultsDiv, GetType(), resultsDiv.UniqueID, "window.print();", true);
}
我也试过了:
ScriptManager.RegisterStartupScript(this, typeof(Page), "Print", "window.print();", true);
ScriptManager.RegisterStartupScript(resultsDiv, typeof(Page), "Print", "window.print();", true);
还有其他变体,包括 ASP 呈现的面板 (div) 选择器(请参阅下面的 CSS),所以我的想法已经不多了。
这是相关的 CSS:
@media print {
body, html, #wrapper, #resultsDiv,
#ContentPlaceHolder1_resultsDiv {
height: 100%;
width: 100%;
}
p.pagebreakhere {
display: block;
page-break-before: always;
}
}
我需要点击事件来打印所有页面,而不仅仅是第一页。可能更简单地说,给我与右键单击和打印完全相同的对话框。我错过了什么?
【问题讨论】:
标签: javascript html css asp.net printing