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 ;
<asp:gridviewid="GridView1"runat="server"autogeneratecolumns="false"font-names="Arial"
font-size="11pt"alternatingrowstyle-backcolor="#C2D69B"headerstyle-backcolor="green"
allowpaging="true"onpageindexchanging="OnPaging">
<Columns>
<asp:BoundFieldItemStyle-Width= "150px" DataField = "CustomerID"
HeaderText = "CustomerID" />
<asp:BoundFieldItemStyle-Width= "150px" DataField = "City"
HeaderText = "City"/>
<asp:BoundFieldItemStyle-Width= "150px" DataField = "Country"
HeaderText = "Country"/>
<asp:BoundFieldItemStyle-Width= "150px" DataField = "PostalCode"
HeaderText = "PostalCode"/>
Columns>
asp:gridview>
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.