如何在打印某些行后在DataGrid中添加分页符

本文关键字:DataGrid 添加 分页 打印 | 更新日期: 2023-09-27 18:26:11

我有一个显示作业列表的DataGrid。当我打印此列表时,如果它转到另一页上,则某些行会被截断。我想在15行之后添加分页符。因此,一旦DataGrid进入第15行,它将转到下一页进行打印。

 <asp:DataGrid  CssClass="tblResults" runat="server" ID="dgDetails" AutoGenerateColumns="false">
                                <HeaderStyle CssClass="tblResultsHeader" />
                                <AlternatingItemStyle BackColor="#EEEEEE" />
                                <Columns>
                                    <asp:TemplateColumn HeaderText="Job">
                                        <ItemTemplate>
                                            <%# DataBinder.Eval(Container.DataItem,"JobNo") %>
                                        </ItemTemplate>
                                    </asp:TemplateColumn>
                                    <asp:TemplateColumn HeaderText="Date">
                                        <ItemTemplate>
                                            <%# DataBinder.Eval(Container.DataItem, "DeliverDateTime")%>
                                        </ItemTemplate>
                                    </asp:TemplateColumn>
                                    <asp:TemplateColumn HeaderText="Collect From">
                                        <ItemTemplate>
                                            <%# DataBinder.Eval(Container.DataItem, "CollectionAddressInvoice")%>
                                        </ItemTemplate>
                                    </asp:TemplateColumn>
                                    <asp:TemplateColumn HeaderText="DeliverTo">
                                        <ItemTemplate>
                                            <%# DataBinder.Eval(Container.DataItem,"DeliveryAddressInvoice") %>
                                        </ItemTemplate>
                                    </asp:TemplateColumn>

DataSet dsTable = null;
            dsTable = DataUtils.GetTableProperties(Company.Current.CompanyID, "InvoicePrint" + q.Job.JobScreen);
            if (dsTable.Tables[0].Rows.Count == 0)
            {
                dsTable = DataUtils.GetTableProperties(Company.Current.CompanyID, "InvoicePrint");
            }
            if (dsTable.Tables[0].Rows.Count > 0)
            {
                DataGrid dgDetails = new DataGrid();
                dgDetails.ID = "dgResults";
                dgDetails.Width = new Unit(dsTable.Tables[0].Rows[0]["Width"].ToString());
                dgDetails.BorderWidth = new Unit(dsTable.Tables[0].Rows[0]["BorderWidth"].ToString());
                switch (dsTable.Tables[0].Rows[0]["GridLines"].ToString().ToUpper())
                {
                    case "BOTH":
                        dgDetails.GridLines = GridLines.Both;
                        break;
                    case "HORIZONTAL":
                        dgDetails.GridLines = GridLines.Horizontal;
                        break;
                    case "NONE":
                        dgDetails.GridLines = GridLines.None;
                        break;
                    case "VERTICAL":
                        dgDetails.GridLines = GridLines.Vertical;
                        break;
                }
                dgDetails.AutoGenerateColumns = false;
                dgDetails.ShowFooter = false;
                dgDetails.DataKeyField = dsTable.Tables[0].Rows[0]["DataKeyField"].ToString();
                dgDetails.CssClass = "tblResults";
                dgDetails.HeaderStyle.CssClass = "tblResultsHeader";
                if (!string.IsNullOrEmpty(Company.Current.Theme))
                {
                    dgDetails.HeaderStyle.ForeColor = System.Drawing.ColorTranslator.FromHtml(Company.Current.TextColor);
                    dgDetails.HeaderStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(Company.Current.Theme);
                }
                dgDetails.AlternatingItemStyle.CssClass = "ResultsStyleAlt";
                dgDetails.ItemStyle.CssClass = "ResultsStyle";
                dgDetails.AllowSorting = false;
                dgDetails.AllowPaging = false;
                foreach (DataRow dr in dsTable.Tables[1].Rows)
                {
                    if (Convert.ToBoolean(dr["ShowInTableOnly"]) || !Convert.ToBoolean(dr["ShowInPopUpOnly"]))
                    {
                        dgDetails.Columns.Add(CreateBoundColumn(dr));                        
                    }
                }
                List<InvoicePrint> invItems = InvoicePrint.GetInvoiceItems(Company.Current.CompanyID, int.Parse(q.InvoiceNo), OrderByPoNum);
                dgDetails.ItemDataBound += new DataGridItemEventHandler(dgDetails_Bind);
                dgDetails.DataSource = invItems;
                dgDetails.DataBind();

但是我该把分页符放在哪里呢?

如何在打印某些行后在DataGrid中添加分页符

您可以检查页面索引并将行样式设置为"page-break-after",这将帮助您在打印某些记录后分页请参阅下面打印按钮上的代码

 GridView1.UseAccessibleHeader = true;
GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;
GridView1.FooterRow.TableSection = TableRowSection.TableFooter;
GridView1.Attributes["style"] = "border-collapse:separate";
foreach (GridViewRow row in GridView1.Rows)
{
    if (row.RowIndex % 10 == 0 && row.RowIndex != 0)
    {
        row.Attributes["style"] = "page-break-after:always;";
    }
}
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('"");
string style = "<style type = 'text/css'>thead {display:table-header-group;} tfoot{display:table-footer-group;}</style>";
sb.Append(style + gridHTML);
sb.Append("'");");
sb.Append("printWin.document.close();");
sb.Append("printWin.focus();");
sb.Append("printWin.print();");
sb.Append("printWin.close();");
sb.Append("};");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "GridPrint", sb.ToString());
GridView1.DataBind();

希望它能帮助