توضیحات و دانلود

خروجی GridView در قالب فرمت های Word, Excel, PDF, CSV در ASP.NET
0 0
خروجی GridView در قالب فرمت های Word, Excel, PDF, CSV در ASP.NET

با سلام در این مقاله،  توضیح خواهیم داد که چگونه خروجی GridView را به فرمت های ورد، اکسل، PDF و CSV نمایش دهید .

خروجی ورد، اکسل و CSV را می توان به آسانی با استفاده از ASP.Net بدون ابزار شخص ثالث به دست آورد، اما برای خروجی  GridView به PDF باید از iTextSharp استفاده کنید که یک کتابخانه رایگان برای خروجی HTML به PDF است.

برای شروع از جدول مشتریان پایگاه داده NorthWind استفاده می کنیم  .

کد HTML کامپوننت GridView در زیر نشان داده شده است

<asp:GridView ID="GridView1" runat="server"

    AutoGenerateColumns = "false" Font-Names = "Arial"

    Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B" 

    HeaderStyle-BackColor = "green" AllowPaging ="true"  

    OnPageIndexChanging = "OnPaging" >

   <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 = "Country"

    HeaderText = "Country"/>

    <asp:BoundField ItemStyle-Width = "150px" DataField = "PostalCode"

    HeaderText = "PostalCode"/>

   </Columns>

</asp:GridView>

در شکل زیر GridView با چهار دکمه نشان داده شده است

1      خروجی در ورد

2      خروجی در اکسل

3      خروجی در PDF

4      خروجی در  CSV

خروجی  به فرمت مایکروسافت ورد

C #

protected void btnExportWord_Click(object sender, EventArgs e)

{

    Response.Clear();

    Response.Buffer = true;

    Response.AddHeader("content-disposition",

    "attachment;filename=GridViewExport.doc");

    Response.Charset = "";

    Response.ContentType = "application/vnd.ms-word ";

    StringWriter sw= new StringWriter();

    HtmlTextWriter hw = new HtmlTextWriter(sw);

    GridView1.AllowPaging = false;

    GridView1.DataBind();

    GridView1.RenderControl(hw);

    Response.Output.Write(sw.ToString());

    Response.Flush();

    Response.End();

}

VB.Net

Protected Sub btnExportWord_Click(ByVal sender As Object,

    ByVal e As EventArgs)

        Response.Clear()

        Response.Buffer = True

        Response.AddHeader("content-disposition",

        "attachment;filename=GridViewExport.doc")

        Response.Charset = ""

        Response.ContentType = "application/vnd.ms-word "

        Dim sw As New StringWriter()

        Dim hw As New HtmlTextWriter(sw)

        GridView1.AllowPaging = False

        GridView1.DataBind()

        GridView1.RenderControl(hw)

        Response.Output.Write(sw.ToString())

        Response.Flush()

        Response.End()

    End Sub

تابع فوق، محتوای GridView را به صورت فرمت مایکروسافت ورد ارائه می کند. متوجه خواهید شد که  قبل از خروجی  اسکرول را غیرفعال می کنیم، به طوری که همه صفحات شامل  شود.

خروجی فایل مایکرو سافت ورد

خروجی به فرمت مایکروسافت اکسل

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

ابتدا رنگ پس زمینه هر سطر را به سفید تغییر می دهیم.

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

همچنین  کلاس سبک textmode را به تمام سلول ها اعمال می کنیم و سپس کلاس CSS را به GridView قبل از رندر اضافه می کنیم که این اطمینان را می دهد که تمام محتویات GridView به صورت متن ارائه می شوند.

protected void btnExportExcel_Click(object sender, EventArgs e)

{

Response.Clear();

Response.Buffer = true;

 

Response.AddHeader("content-disposition",

"attachment;filename=GridViewExport.xls");

Response.Charset = "";

Response.ContentType = "application/vnd.ms-excel";

StringWriter sw = new StringWriter();

HtmlTextWriter hw = new HtmlTextWriter(sw);

 

GridView1.AllowPaging = false;

GridView1.DataBind();

 

//Change the Header Row back to white color

GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF");

 

//Apply style to Individual Cells

GridView1.HeaderRow.Cells[0].Style.Add("background-color", "green");

GridView1.HeaderRow.Cells[1].Style.Add("background-color", "green");

GridView1.HeaderRow.Cells[2].Style.Add("background-color", "green");

GridView1.HeaderRow.Cells[3].Style.Add("background-color", "green");  

 

for (int i = 0; i < GridView1.Rows.Count;i++ )

{

    GridViewRow row = GridView1.Rows[i];

 

    //Change Color back to white

    row.BackColor = System.Drawing.Color.White;

 

    //Apply text style to each Row

    row.Attributes.Add("class", "textmode");

 

    //Apply style to Individual Cells of Alternating Row

    if (i % 2 != 0)

    {

        row.Cells[0].Style.Add("background-color", "#C2D69B");

        row.Cells[1].Style.Add("background-color", "#C2D69B");

        row.Cells[2].Style.Add("background-color", "#C2D69B");

        row.Cells[3].Style.Add("background-color", "#C2D69B");  

    }

}

GridView1.RenderControl(hw);

 

//style to format numbers to string

string style = @"<style> .textmode { mso-number-format:\@; } </style>";

Response.Write(style);

Response.Output.Write(sw.ToString());

Response.Flush();

Response.End();

}

VB.Net

Protected Sub btnExportExcel_Click(ByVal sender As Object,

ByVal e As EventArgs)

  Response.Clear()

  Response.Buffer = True

 

  Response.AddHeader("content-disposition",

  "attachment;filename=GridViewExport.xls")

  Response.Charset = ""

  Response.ContentType = "application/vnd.ms-excel"

 

  Dim sw As New StringWriter()

  Dim hw As New HtmlTextWriter(sw)

 

  GridView1.AllowPaging = False

  GridView1.DataBind()

 

  'Change the Header Row back to white color

  GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF")

 

  'Apply style to Individual Cells

  GridView1.HeaderRow.Cells(0).Style.Add("background-color", "green")

  GridView1.HeaderRow.Cells(1).Style.Add("background-color", "green")

  GridView1.HeaderRow.Cells(2).Style.Add("background-color", "green")

  GridView1.HeaderRow.Cells(3).Style.Add("background-color", "green")

 

  For i As Integer = 0 To GridView1.Rows.Count - 1

   Dim row As GridViewRow = GridView1.Rows(i)

 

   'Change Color back to white

   row.BackColor = System.Drawing.Color.White

 

   'Apply text style to each Row

   row.Attributes.Add("class", "textmode")

 

   'Apply style to Individual Cells of Alternating Row

   If i Mod 2 <> 0 Then

    row.Cells(0).Style.Add("background-color", "#C2D69B")

    row.Cells(1).Style.Add("background-color", "#C2D69B")

    row.Cells(2).Style.Add("background-color", "#C2D69B")

    row.Cells(3).Style.Add("background-color", "#C2D69B")

   End If

  Next

  GridView1.RenderControl(hw)

 

  'style to format numbers to string

  Dim style As String = "<style>.textmode{mso-number-format:\@;}</style>"

  Response.Write(style)

  Response.Output.Write(sw.ToString())

  Response.Flush()

  Response.End()

End Sub

خروجی فایل مایکرو سافت ورد

خروجی به فرمت سند قابل حمل

برای خروجی GridView به PDF  از کتابخانه iTextSharp استفاده می کنیم. شما نیاز به اضافه کردن مرجع کتابخانه iTextSharp در وب سایت خود دارید.

سپس نام فضاهای زیر را وارد کنید

C #

using iTextSharp.text;

using iTextSharp.text.pdf;

using iTextSharp.text.html;

using iTextSharp.text.html.simpleparser;

VB.Net

Imports iTextSharp.text

Imports iTextSharp.text.pdf

Imports iTextSharp.text.html

Imports iTextSharp.text.html.simpleparser

به طور پیش فرض کتابخانه iTextSharp از رنگ پس زمینه سلول های جدول یا ردیف های جدول پشتیبانی نمی کند

از این رو هنگامی که شما آن را به عنوان خروجی در  PDF نمایش می دهید آن را بدون هیچ گونه قالب بندی ارائه می دهد.

برای این آموزش،  قبلا DLL Library iTextSharp را اصلاح کرده ایم  تا GridView با تمام رنگ پس زمینه مورد استفاده قرار گیرد. شما می توانید کد برای خروجی GridView به PDF زیر را وارد کنید

C #

protected void btnExportPDF_Click(object sender, EventArgs e)

{

    Response.ContentType = "application/pdf";

    Response.AddHeader("content-disposition",

     "attachment;filename=GridViewExport.pdf");

    Response.Cache.SetCacheability(HttpCacheability.NoCache);

    StringWriter sw = new StringWriter();

    HtmlTextWriter hw = new HtmlTextWriter(sw);

    GridView1.AllowPaging = false;

    GridView1.DataBind();

    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.Write(pdfDoc);

    Response.End(); 

}

VB.Net

Protected Sub btnExportPDF_Click(ByVal sender As Object,

ByVal e As EventArgs)

 Response.ContentType = "application/pdf"

 Response.AddHeader("content-disposition",

 "attachment;filename=GridViewExport.pdf")

 Response.Cache.SetCacheability(HttpCacheability.NoCache)

 Dim sw As New StringWriter()

 Dim hw As New HtmlTextWriter(sw)

 GridView1.AllowPaging = False

 GridView1.DataBind()

 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.Write(pdfDoc)

 Response.End()

End Sub

خروجی فایل در PDF

خروجی به متن / CSV

در نهایت خروجی GridView به CSV یا متن فایل تعریف شده توسط جدا کننده مانند کاما است.

برای خروجی GridView به عنوان CSV، دو حلقه For را اجرا می کنیم. در حالی که با استفاده از ستون GridView و اضافه کردن کاما پس از هر ستون حلقه  For اجرا می شود  و زمانی که حلقه اول به پایان رسید  با اضافه کردن کاراکتر خط جدید به ردیف بعدی می رویم .

C #

protected void btnExportCSV_Click(object sender, EventArgs e)

{

    Response.Clear();

    Response.Buffer = true;

    Response.AddHeader("content-disposition",

     "attachment;filename=GridViewExport.csv");

    Response.Charset = "";

    Response.ContentType = "application/text";

 

    GridView1.AllowPaging = false;

    GridView1.DataBind();

 

    StringBuilder sb = new StringBuilder();

    for (int k = 0; k < GridView1.Columns.Count; k++)

    {

        //add separator

        sb.Append(GridView1.Columns[k].HeaderText + ',');

    }

    //append new line

    sb.Append("\r\n");

    for (int i = 0; i < GridView1.Rows.Count; i++)

    {

        for (int k = 0; k < GridView1.Columns.Count; k++)

        {

            //add separator

            sb.Append(GridView1.Rows[i].Cells[k].Text + ',');

        }

        //append new line

        sb.Append("\r\n");

    }

    Response.Output.Write(sb.ToString());

    Response.Flush();

    Response.End();

}

VB.Net

Protected Sub btnExportCSV_Click(ByVal sender As Object,

ByVal e As EventArgs)

 Response.Clear()

 Response.Buffer = True

 Response.AddHeader("content-disposition",

 "attachment;filename=GridViewExport.csv")

 Response.Charset = ""

 Response.ContentType = "application/text"

 

 GridView1.AllowPaging = False

 GridView1.DataBind()

 

 Dim sb As New StringBuilder()

 For k As Integer = 0 To GridView1.Columns.Count - 1

  'add separator

  sb.Append(GridView1.Columns(k).HeaderText + ","c)

 Next

 'append new line

 sb.Append(vbCr & vbLf)

 For i As Integer = 0 To GridView1.Rows.Count - 1

  For k As Integer = 0 To GridView1.Columns.Count - 1

   'add separator

   sb.Append(GridView1.Rows(i).Cells(k).Text + ","c)

  Next

  'append new line

  sb.Append(vbCr & vbLf)

 Next

 Response.Output.Write(sb.ToString())

 Response.Flush()

 Response.End()

End Sub

خروجی فایل در اکسل

هنگامی که برنامه را برای اولین بار اجرا می کنید و بر روی Export کلیک می کنید ممکن است خطای زیر را دریافت کنید

برای جلوگیری از خطا لازم است که این رویداد را اضافه کنید تا GridView قبل از خروجی رندر شود .

C #

public override void VerifyRenderingInServerForm(Control control)

{

    /* Verifies that the control is rendered */

}

VB.Net

Public Overloads Overrides Sub VerifyRenderingInServerForm

(ByVal control As Control)

    ' Verifies that the control is rendered

End Sub

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :