我有一个显示作业列表的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();
但是我该把分页符放在哪里呢?
您可以检查页面索引并将行样式设置为"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();
希望它能帮助