نحوه چاپ کنترل GridView در ASP.NET

چهارشنبه 15 مرداد 1393

توضیح نحوه چاپ کنترل GridView در ASP.NET و اضافه کردن page break ها

نحوه چاپ کنترل GridView در ASP.NET

توضیح  در مورد نحوه چاپ کنترل GridView در ASP.NET و به منظور جلوگیری از برش ردیف هاواضافه شدن page break ها به طور اتوماتیک خودمان هرجا که نیاز است  breaks page ها را اضافه کنیم و یاد می گیریم چگونه Header ها  را در هر صفحه چاپی تکرار کنیم.

قبلا در مورد اینکه چگونه کنترل GridView  را چاپ کنیم یاد گرفته اید اما در هنگام چاپ وقتی ردیفهای  GridView از سایز صفحه بیشتر می شد با این مشکل مواجه می شدید که ردیف هایی که در آخر صفحه بودند توسط پرینتر بریده می شدند.

برای حل این مشکل من برای شما توضیح خواهم داد که چگونه Page break ها را به طور مرتب اضافه کنیم تا Grid View  به طور صحیح چاپ شود و همچنین  به شما خواهم آموخت که چگونه ما می توانیم ردیف Header را در هر صفحه GridView در ASP.NET اضافه کنیم.

نمونه کد GridView :

همان طور که در زیر می بینید در  اینجا من یک GridView ساده در ASP.NET به همراه یک دکمه برای چاپ  محتویات GridView  دارم :

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" Font-Names="Arial"
    Font-Size="11pt" AlternatingRowStyle-BackColor="#C2D69B" HeaderStyle-BackColor="green"
    AllowPaging="false">
    <Columns>
        <asp:BoundField ItemStyle-Width="150px" DataField="CustomerID" HeaderText="CustomerID" />
        <asp:BoundField ItemStyle-Width="150px" DataField="City" HeaderText="City" />
        <asp:BoundField ItemStyle-Width="150px" DataField="PostalCode" HeaderText="PostalCode" />
    </Columns>
</asp:GridView>
<br />
<asp:Button ID="btnPrint" runat="server" Text="Print" OnClick="Print" />

پرینت کردن GridView  به وسیله page break و Header در هر صفحه:

با فشردن دکمه  پرینت مدیریت رویداد های زیر باعث چاپ کنترل GridView  می شود.

protected void Print(object sender, EventArgs e)
{
    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();
}

همان طور که مشاهده می کنید من قبل از چاپ دریک حلقه در هر دهمین ردیف GridView استایل

 page-break-after:always را اضافه می کنم.این کار باعث میشود تا صفحه در ردیف دهم شکسته شود .شما می توانید این عدد را به رقم دلخواه خود در هر صفحه تغییر دهید.

شما همچنین باید رویداد های زیر به منظور جلوگیری از خطای اعتبار رویداد اضافه کنید:


public override void VerifyRenderingInServerForm(Control control)
{
    /*Verifies that the control is rendered */
}

 

 

فایل های ضمیمه

جعفری

نویسنده 22 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید