【问题标题】:How to add a page break in DataGrid after certain rows get printed打印某些行后如何在 DataGrid 中添加分页符
【发布时间】:2016-03-14 13:10:39
【问题描述】:

我有一个显示作业列表的 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();

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

【问题讨论】:

    标签: c# asp.net datagrid page-break


    【解决方案1】:

    您可以检查页面索引并将行样式设置为“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();
    

    希望对你有帮助

    【讨论】:

    • 感谢您的回答,但我使用的是 DataGrid 而不是 GridView
    猜你喜欢
    • 2011-09-26
    • 2019-09-05
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多