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#
// 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
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#
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
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.pdf;
using iTextSharp.text.html;
using iTextSharp.text.html.simpleparser;
VB.Net
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#
{
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
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#
{
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
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#
{
/* Kontrolün renderlandigi dogrulaniyor */
}
VB.Net
‘ 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
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.
ç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
çookkkk isime yaradi… çookk tesekkürlerrr
Elinize dilinize saglik.. Bilgi paylasildikça artar güzellesir..
güzel bir çalisma fakat resimler gösterilmiyor.
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.
volkan resimleri koymustu aslinda ama resimleri ekledigi yerle ilgili bir sorun var sanirim.
tesekkür ederim isime yaradi ama biraz görsel olarak bikaç resim koysan daha güzel olacakti ..
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.
tesekkürler, bu zamana kadar gördügüm en iyi yazilim websitelerinden biri.
devamini bekleriz…
emeginize saglik