![]() | |
ASP.NET Gridview'daki Kayıtları Word, Excel, PDF ve CSV Formatlarına Aktarma | 03.02.2010 14:43:00 |
| Kategori : ASP.NET Özet : Bu makalemizde Gridview'daki kayıtlarımızı Word, Excel, PDF ve CSV formatlarına nasıl aktaracağımızı öğreneceğiz. ASP.NET ile Word,Excel ve CSV formatlarına 3. parti yazılımlar gerektirmeden kolayca aktarım sağlarken , PDF'e veri aktarımında ise ücretsiz 3. parti bir yazılım olan iTextSharp tool'unu kullanacağız. | |
Bu makalemizde Gridview'daki kayıtlarımızı Word, Excel, PDF ve CSV formatlarına
nasıl aktaracağımızı öğreneceğiz. ASP.NET ile Word,Excel ve CSV formatlarına 3. parti yazılımlar gerektirmeden kolayca aktarım sağlarken , PDF'e veri aktarımında ise ücretsiz 3. parti bir yazılım olan iTextSharp tool'unu kullanacağız. Öncelikle aktarım için Gridview içerisinde biraz veri bulunması gerekmekte. Bunun için Northwind Database'nden Customers kayıtlarını Gridview'e dolduruyorum. Gridview’mızın HTML çıktısı aşağıdaki gibidir ; Gridview'mızı hazırladıktan sonra altına 4 tane buton ekliyoruz. 1. Export To Word 2. Export To Excel 3. Export To PDF 4. Export To CSV
Microsoft Word Formatına Veri Aktarımı C#
protected void btnExportWord_Click(object sender, EventArgs e) {
// İçeriği 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); // Gridviewdakı bütün verileri aktarabilmek için sayfalama özelleğini iptal edip , Gridview’mızdaki değişikliklerin geçerli olabilmesi için tekrar dolduruyoruz GridView1.AllowPaging = false; GridView1.DataBind(); // Gridview’daki değerlerimizi html formatına renderlıyoruz 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 yazdığım açıklamalar VB.Net tarafı içinde geçerlidir. Eğer eksiksiz kodu yazdıysanız alttaki gibi bir çıktı elde edeceksiniz. ![]() Microsoft Excel Formatına Veri Aktarımı 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(); //Başlık rowlarının arka planını beyaz olarak ayarlıyoruz. GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); //Şimdide hücre başlıklarının arka planını yeşil yapıyoruz 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 ayarlıyoruz row.BackColor = System.Drawing.Color.White; //Her row’un text özelliğine bir class atıyoruz row.Attributes.Add("class", "textmode"); //Biraz daha güzellik katmak için 2. Row’ların arka planlarına farklı 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); //Sayısal formatların bozuk çıkmaması 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 yazdığım açıklamalar VB.Net tarafı içinde geçerlidir. Eğer eksiksiz kodu yazdıysanız alttaki gibi bir çıktı elde edeceksiniz. ![]() PDF Formatına Veri Aktarımı Gridview içerisindeki verileri PDF formatına aktarmak için ücretsiz bir yazılım olan iTextSharp kütüphanesini kullanacağız. Bunun için projenize iTextSharp kütüphanesini projenize ekliyorsunuz ve aşağıdaki namespace ‘leri sayfanıza 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: Eğer PDF’inizin görselliği 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 Eğer eksiksiz kodu yazdıysanız alttaki gibi bir çıktı elde edeceksiniz. ![]() CSV Formatına Veri Aktarımı En son konumuz olan CSV formatına veri aktarımına geldik. Burada belirleyeceğiniz bir karakter ile verilerinizi birbirinden ayırmanız gerekmektedir. Ben “,” karakterini kullanacağım. 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++) { //Ayıraç belirliyoruz sb.Append(GridView1.Columns[k].HeaderText + ','); } //Yeni bir satır ekliyoruz sb.Append("\r\n"); for (int i = 0; i < GridView1.Rows.Count; i++) { for (int k = 0; k < GridView1.Columns.Count; k++) { // Ayıraç belirliyoruz sb.Append(GridView1.Rows[i].Cells[k].Text + ','); } //Yeni bir satır 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 Eğer eksiksiz kodu yazdıysanız alttaki gibi bir çıktı elde edeceksiniz. ![]() Projenizi ilk çalıştırdığınızda verileri export etmek istediğinizde aşağıdaki gibi bir hata ile karşılacaksınız. ![]() Gridview nesnesinin export işleminden önce render edilmemiş olması. Bunun için aşağıdaki kod bloğunu projemize ekliyoruz. C#
public override void VerifyRenderingInServerForm(Control control)
{ /* Kontrolün renderlandığı doğrulanıyor */ } VB.Net
Public Overloads Overrides Sub VerifyRenderingInServerForm
(ByVal control As Control) ' Kontrolün renderlandığı doğrulanıyor End Sub Bir makalemizin daha sonuna geldik. Makale ile ilgili sorularınızı mail adresimden bana ulaşarak sorabilirsiniz. Volkan KORKMAZ Microsoft Certified Business Management Solutions Specialist volkankorkmaz@gmail.com http://www.volkankorkmaz.net | |
Yazgelistir.com | |