在ASP.NET中打印所有由分页符分隔的页面

时间:2018-10-01 17:47:53

标签: javascript html css asp.net printing

我有一个带有#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呈现的Panel(div)选择器(请参见下面的CSS),所以我的想法已经用完了。

这是相关的CSS:

@media print {
    body, html, #wrapper, #resultsDiv, 
#ContentPlaceHolder1_resultsDiv {
        height: 100%;
        width: 100%;
    }
    p.pagebreakhere {
        display: block;
        page-break-before: always;
    }
}

我需要click事件,以允许我打印所有页,而不仅仅是首页。简而言之,给我与右键单击并打印时完全相同的对话框。我想念什么?

1 个答案:

答案 0 :(得分:0)

好吧,只要您可以做一些客户端代码(我对这个解决方案就可以了),事实证明这很容易。

在.aspx页中,修改:

<asp:Button runat="server" ID="btnPrint" OnClick="btnPrint_OnClick" Text="Print for recount"/> 

收件人:

<asp:Button runat="server" ID="btnPrint" OnClick="btnPrint_OnClick" Text="Print for recount" OnClientClick="javascript:window.print();"/>

弹出“右键单击并打印”对话框,该对话框允许用户打印所有页面,并且OnClick事件仍然运行以进行打印计数的后端更新。

可能有一个更优雅的解决方案,但是我受到时间限制(本周晚些时候的库存),所以我愿意继续使用该解决方案。

相关问题