آموزش چگونگی‌ Export سطر‌های مورد نظر GridView به فایل pdf در ASP.Net با استفاده از #C و VB.Net

سه شنبه 18 شهریور 1393

در این مقاله آموزش چگونگی‌ Export سطر‌های مورد نظر GridView به فایل pdf در ASP.Net بااستفاده از # Cو VB.Net را آموزش خواهیم داد. میخواهیم با استفاده از textbox سطرهای مورد نظر را انتخاب کنیم و بعد آن سطرهارا به pdf اکسپورت کنیم.

آموزش چگونگی‌ Export سطر‌های مورد نظر GridView به فایل pdf در ASP.Net با  استفاده از #C و VB.Net

در این مقاله آموزش چگونگی‌ Export سطر‌های مورد نظر GridView  به فایل pdf در ASP.Net بااستفاده از # Cو VB.Net را آموزش خواهیم داد.
میخواهیم با استفاده از textbox سطرهای مورد نظر را انتخاب کنیم و بعد آن سطرهارا به pdf اکسپورت کنیم.برای این کار باید GridView شامل یک ستون checkbox برای انتخاب سطرهای مورد نظر ما باشد.


Database


برای این مقاله از دیتابیس  Northwind استفاده کرده‌ام که شما می توانید از ادرس زیر برای دانلود و نصب دستورالعملهای ان استفاده کنید:

Install Microsoft Northwind and Pubs Sample databases in SQL Server Management Studio

کد Html


کد Html شامل GridView و یک Button است. اولین ستون یک TemplateField است که شامل یک Checkbox برای انتخاب سطرهای مورد نظر است.

<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" RowStyle-BackColor="#A1DCF2" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkSelect" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="ContactName" HeaderText="Contact Name" ItemStyle-Width="150px" />
        <asp:BoundField DataField="City" HeaderText="City" ItemStyle-Width="100px" />
        <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="100px" />
    </Columns>
</asp:GridView>
<br />
<asp:Button ID="btnExport" runat="server" Text="Export To PDF" OnClick="ExportToPDF" />

 


Namespace‌ها
باید این Namespace هارا اضافه کنید:

#C

 

using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;


VB.Net

Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports iTextSharp.text
Imports iTextSharp.text.html.simpleparser
Imports iTextSharp.text.pdf


بایند کردن GridView

کدی که می‌بینید مربوط به بایند کردن GridView با رکورد‌هایی‌ از جدول Customers د ر dartabase است.

#C
 

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string strConnString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(strConnString))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Customers"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}



VB.Net

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Me.BindGrid()
    End If
End Sub
 
Private Sub BindGrid()
    Dim strConnString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(strConnString)
        Using cmd As New SqlCommand("SELECT TOP 10 * FROM Customers")
            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dt As New DataTable()
                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                End Using
            End Using
        End Using
    End Using
End Sub




Export سطر‌های مورد نظر GridView به فایل pdf در ASP.Net

در زیر کد‌های مورد نظر را می‌بینید
ابتدا روی سطر‌های GridView یک حلقه می‌زنیم تا مشخص کنیم checkbox کدام سطر تیک زده نشده است،در این صورت visible آن false میشود.
در آخر GridView با استفاده از HtmlTextWriter به رشتهٔ html ترجمه می شود و سپس HTML ایجاد شده به iTextSharp در فایل pdf اضافه می شود که بعد از آن ، درطول جریان درخواست ، به pdf اکسپورت می شود.

توجه:itextsharp.dll  را در پیوست مقاله برایتان قرار داده ام.این فایل برای style‌ها رنگ‌ها و فرمت GridView اضافه شده است.بنابر این اگر از کپی‌‌های دیگر فایل itextsharp استفاده کنید، style ، رنگ و فرمت GridView به pdf اکسپورت شده ، انتقال داده نمی‌شود.

#C





protected void ExportToPDF(object sender, EventArgs e)
{
    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter hw = new HtmlTextWriter(sw))
        {
 
            //Hide the Column containing CheckBox
            GridView1.Columns[0].Visible = false;
            foreach (GridViewRow row in GridView1.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    //Hide the Row if CheckBox is not checked
                    row.Visible = (row.FindControl("chkSelect") as CheckBox).Checked;
                }
            }
 
            GridView1.RenderControl(hw);
            StringReader sr = new StringReader(sw.ToString());
            Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
            HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
            pdfDoc.Open();
            htmlparser.Parse(sr);
            pdfDoc.Close();
 
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Write(pdfDoc);
            Response.End();
        }
    }
}
 
public override void VerifyRenderingInServerForm(Control control)
{
    /* Verifies that the control is rendered */
}

 

VB.Net

Protected Sub ExportToPDF(sender As Object, e As EventArgs)
    Using sw As New StringWriter()
        Using hw As New HtmlTextWriter(sw)
 
            'Hide the Column containing CheckBox
            GridView1.Columns(0).Visible = False
            For Each row As GridViewRow In GridView1.Rows
                If row.RowType = DataControlRowType.DataRow Then
                    'Hide the Row if CheckBox is not checked
                    row.Visible = TryCast(row.FindControl("chkSelect"), CheckBox).Checked
                End If
            Next
 
            GridView1.RenderControl(hw)
            Dim sr As New StringReader(sw.ToString())
            Dim pdfDoc As New Document(PageSize.A4, 10.0F, 10.0F, 10.0F, 0.0F)
            Dim htmlparser As New HTMLWorker(pdfDoc)
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
            pdfDoc.Open()
            htmlparser.Parse(sr)
            pdfDoc.Close()
 
            Response.ContentType = "application/pdf"
            Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf")
            Response.Cache.SetCacheability(HttpCacheability.NoCache)
            Response.Write(pdfDoc)
            Response.[End]()
        End Using
    End Using
End Sub
 
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    ' Verifies that the control is rendered
End Sub



 

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

صبا ذاکر

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

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

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