Asp.Net GridView deki veriyi PDF, EXCEL, WORD ve CSV olarak kaydetme

GridView içerisine aktardığımız veriyi Pdf, Doc, Excel ve Csv olarak nasıl kaydedilir ona şimdi bakacağız. Tabi bunu yapabilmemiz için itextSharp  eklentisini yüklememiz gerekicek bunun için;
https://sourceforge.net/projects/itextsharp/ adresinden eklentiyi indirip aşağıdaki gibi projemize ekliyoruz.



Kod kısmına geçip aşağıdaki class ları ekleyelim.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html;
using iTextSharp.text.html.simpleparser;
using System.Text;
Sonra sayfamıza bir adet GridView kontrolü ekleyip ilgili veri tabanımızdan bağlantı kuralım. Sonrada sayfamızı 4 adet Button ekleyelim ve isimlerini Pdf Kaydet, Doc  Kaydet, Excel Kaydet ve Csv Kaydet olarak yapalım.
Öncelikle Pdf için gerekli kodları yazalım;

 public override void VerifyRenderingInServerForm(Control control)
    {
      }
    protected void OnPaging(object sender, GridViewPageEventArgs  e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataBind();  
    }
    protected void btnKaydetPDF_Click(object sender, EventArgs e)
    {
        string tarih = DateTime.Now.ToString("dd.mm.yyyy");
        DateTime tarih = DateTime.Now; //Dosya ismine sistem saatini ekledim
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=Kisi_Listesi_"+tarih+".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.Rotate(), 10f,10f,10f,0f); 
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        //pdfDoc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); Yatay olarak kaydetmek için
        //pdfDoc.SetPageSize(iTextSharp.text.PageSize.A4); Dikey olarak kaydetmek için

        pdfDoc.Open();
        htmlparser.Parse(sr);
        pdfDoc.Close();
        Response.Write(pdfDoc);
        Response.End();  
    }
Word için gerekli kodları yazalım;

protected void btnKaydetWord_Click(object sender, EventArgs e)
    {
        DateTime tarih = DateTime.Now; //Dosya ismine sistem saatini ekledim
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=Kisi_Listesi_" + tarih + ".doc"); //Dosya adı 
        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();
    }
Excel için gerekli kodları yazalım;
protected void btnKaydetExcel_Click(object sender, EventArgs e)
    {
        DateTime tarih = DateTime.Now; //Dosya ismine sistem saatini ekledim

        Response.Clear();
        Response.Buffer = true;

        Response.AddHeader("content-disposition", "attachment;filename=Kisi_Listesi_" + tarih + ".xls");//Dosya adı 
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);

        GridView1.AllowPaging = false;
        GridView1.DataBind(); 

        //Üst satır rengi
        GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF");

        //İlk 4 sütünün ilk dört satır arka plan rengi
        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 = @""; 
        Response.Write(style); 
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
    }
Csviçin gerekli kodları yazalım;

 protected void btnKaydetCSV_Click(object sender, EventArgs e)
    {
        DateTime tarih = DateTime.Now; //Dosya ismine sistem saatini ekledim

        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=Kisi_Listesi_" + tarih + ".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();
    }
Umarım işinizi görür :)

Yorumlar

Bu blogdaki popüler yayınlar

Asp.Net ile Uyarı Mesajları Vermek (msgbox)

Asp.Net ile T.C. Kimlik Doğrulama (Mernis) Web Service ile

Asp.Net Eval Kullanımı