ASP.NET Gridview’daki Kayitlari Word, Excel, PDF ve CSV Formatlarina Aktarma

Bu makalemizde Gridview’daki kayitlarimizi Word, Excel, PDF ve CSV formatlarina nasil aktaracagimizi ögrenecegiz.
ASP.NET ile Word,Excel ve CSV formatlarina 3. parti yazilimlar gerektirmeden kolayca aktarim saglarken , PDF’e veri aktariminda ise ücretsiz 3. parti bir yazilim olan iTextSharp tool’unu kullanacagiz.
Öncelikle aktarim için Gridview içerisinde biraz veri bulunmasi gerekmekte. Bunun için Northwind Database’nden Customers kayitlarini Gridview’e dolduruyorum. Gridview’mizin HTML çiktisi asagidaki gibidir ;

<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’mizi hazirladiktan sonra altina 4 tane buton ekliyoruz.
  1. Export To Word
  2. Export To Excel
  3. Export To PDF
  4. Export To CSV



Microsoft Word Formatina Veri Aktarimi

C#

protected void btnExportWord_Click(object sender, EventArgs e) {
  // Içerigi yüklemeden önce ekrandaki çöpleri temizliyoruz
  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);
  // Gridviewdaki bütün verileri aktarabilmek için sayfalama özellegini iptal edip , Gridview’mizdaki degisikliklerin geçerli olabilmesi için tekrar dolduruyoruz
  GridView1.AllowPaging = false;
  GridView1.DataBind();
  // Gridview’daki degerlerimizi html formatina renderliyoruz
  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

Not : C# içerisinde yazdigim açiklamalar VB.Net tarafi içinde geçerlidir. Eger eksiksiz kodu yazdiysaniz alttaki gibi bir çikti elde edeceksiniz.



Microsoft Excel Formatina Veri Aktarimi

C#
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();
  //Baslik rowlarinin arka planini beyaz olarak ayarliyoruz.
  GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF");
  //Simdide hücre basliklarinin arka planini yesil yapiyoruz
  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];
     //Arka plan rengini beyaz olarak ayarliyoruz
     row.BackColor = System.Drawing.Color.White;
     //Her row’un text özelligine bir class atiyoruz
     row.Attributes.Add("class", "textmode");
     //Biraz daha güzellik katmak için 2. Row’larin arka planlarina farkli bir renk veriyoruz
          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);
  //Sayisal formatlarin bozuk çikmamasi için format belirliyoruz
  string style = @" ";
  Response.Write(style);
  Response.Output.Write(sw.ToString());
  Response.Flush();
  Response.End();

VB.Net
PProtected 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()
     GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF")
     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)
          row.BackColor = System.Drawing.Color.White
          row.Attributes.Add("class", "textmode")
          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)
     Dim style As String = " "
     Response.Write(style)
     Response.Output.Write(sw.ToString())
     Response.Flush()
     Response.End()
End Sub br />


C# içerisinde yazdigim açiklamalar VB.Net tarafi içinde geçerlidir. Eger eksiksiz kodu yazdiysaniz alttaki gibi bir çikti elde edeceksiniz.
.



PDF Formatina Veri Aktarimi
Gridview içerisindeki verileri PDF formatina aktarmak için ücretsiz bir yazilim olan iTextSharp kütüphanesini kullanacagiz. Bunun için projenize iTextSharp kütüphanesini projenize ekliyorsunuz ve asagidaki namespace ‘leri sayfaniza ekliyorsunuz.

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
 


Not: Eger PDF’inizin görselligi ile oynamak isterseniz iTextSharp bunu desteklemez.

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

Eger eksiksiz kodu yazdiysaniz alttaki gibi bir çikti elde edeceksiniz.



CSV Formatina Veri Aktarimi

En son konumuz olan CSV formatina veri aktarimina geldik. Burada belirleyeceginiz bir karakter ile verilerinizi birbirinden ayirmaniz gerekmektedir. Ben “,” karakterini kullanacagim.
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++)
     {
          //Ayiraç belirliyoruz
          sb.Append(GridView1.Columns[k].HeaderText + ‘,’);
     }
     //Yeni bir satir ekliyoruz
     sb.Append("\r\n");
     for (int i = 0; i < GridView1.Rows.Count; i++)
     {
          for (int k = 0; k < GridView1.Columns.Count; k++)
          {
          // Ayiraç belirliyoruz
          sb.Append(GridView1.Rows[i].Cells[k].Text + ‘,’);
          }
      //Yeni bir satir ekliyoruz
     sb.Append("\r\n");
     }
     Response.Output.Write(sb.ToString());
     Response.Flush();
     Response.End();
}    

VB.Net
PProtected 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
     sb.Append(GridView1.Columns(k).HeaderText + ","c)
     Next
     sb.Append(vbCr & vbLf)
     For i As Integer = 0 To GridView1.Rows.Count – 1
     For k As Integer = 0 To GridView1.Columns.Count – 1
     sb.Append(GridView1.Rows(i).Cells(k).Text + ","c)
     Next
     sb.Append(vbCr & vbLf)
     Next
     Response.Output.Write(sb.ToString())
     Response.Flush()
     Response.End()
End Sub


Eger eksiksiz kodu yazdiysaniz alttaki gibi bir çikti elde edeceksiniz.



Projenizi ilk çalistirdiginizda verileri export etmek istediginizde asagidaki gibi bir hata ile karsilacaksiniz.


Gridview nesnesinin export isleminden önce render edilmemis olmasi. Bunun için asagidaki kod blogunu projemize ekliyoruz.

C#
public override void VerifyRenderingInServerForm(Control control)
{
/* Kontrolün renderlandigi dogrulaniyor */
}

VB.Net
Public Overloads Overrides Sub VerifyRenderingInServerForm (ByVal control As Control)
‘ Kontrolün renderlandigi dogrulaniyor
End Sub


Bir makalemizin daha sonuna geldik. Makale ile ilgili sorularinizi mail adresimden bana ulasarak sorabilirsiniz.
.

Volkan KORKMAZ
Microsoft Certified Business Management Solutions Specialist
volkankorkmaz@gmail.com
http://www.volkankorkmaz.net

 

11 thoughts on “ASP.NET Gridview’daki Kayitlari Word, Excel, PDF ve CSV Formatlarina Aktarma

  1. RegisterForEventValidation ancak Render() sirasinda çagrilabilir;

    Açiklama: Geçerli web istegi yürütülürken islenmemis
    özel durum olustu. Lütfen hata ve kod içinde kaynaklandigi yer hakkinda
    daha fazla bilgi almak için yigin izlemesini gözden geçirin.

    Özel Durum Ayrintilari: System.InvalidOperationException: RegisterForEventValidation ancak Render() sirasinda çagrilabilir;

    Hatasi aliyorum oysa

    public override void VerifyRenderingInServerForm(Control control)
    {
    /* Kontrolün renderlandigi dogrulaniyor */
    }
    kodunu eklememe ragmen bu hatayi aliyorum üstteki kod blogu tam olarak nereye eklemeliyim normal bir fonksiyon olarak ekliyorum yanlisim nedir.

  2. çok iyi anlatimi var, sorunsuz çalisti, ancak gridview’i pdf e çevirdim. pdf’te içerik koca koca çikti ve daginik, word ve excelde çok iyi görüntü,ne yapmaliyim

  3. anladim içerik olsun diye söylemistim ilk basladigimda resimlere bakarak daha iyi anlamistim yeni baslayan arkadaslarin isine yarar diye söylemistim..ama gerçekten çok iyi içerik verilmis.

  4. volkan resimleri koymustu aslinda ama resimleri ekledigi yerle ilgili bir sorun var sanirim.  

  5. tesekkür ederim isime yaradi ama biraz görsel olarak bikaç resim koysan daha güzel olacakti ..

  6. Gerçekten çok tesekkürler, güzel bir çalisma olmus. Ben bu kodu denedim güzel çalisti ama türkçe karakter sorunu yasiyorum. Gridview i tabl olarak pdf dökümanina aktardim ama gridview deki türkçe karaktrerler pdf dökümaninda çikmadi. Eger bu konuda yardim ederseniz çok mutlu olurum tekrardan çok tesekkürler.

  7. tesekkürler, bu zamana kadar gördügüm en iyi yazilim websitelerinden biri.

    devamini bekleriz…

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir