Bu makalemizde ASP.NET ile veri çekmiş olduğumuz GridView kontrolündeki verilerin Word Dosyasına ve Excel Dosyasına aktarılmasını gerçekleştireceğiz. Örneğimizde SQL de bulunan veritabanındaki verileri GridView içine çekeceğiz. Daha sonra Word’e Aktar ve Excel’e Aktar buttonlarıyla GridView’de bulunan verilerin transferini sağlayacağız.
Sayfamızı aşağıdaki gibi 1 adet Gridview,2 adet button ekleyerek oluşturuyoruz.
GridView kontrolündeki biçimlendirmeleri ve diğer yerleşimler görebileceğiniz default.aspx dosyamıza ait kodları inceleyebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"> <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> <SortedAscendingCellStyle BackColor="#FFF1D4" /> <SortedAscendingHeaderStyle BackColor="#B95C30" /> <SortedDescendingCellStyle BackColor="#F1E5CE" /> <SortedDescendingHeaderStyle BackColor="#93451F" /> </asp:GridView> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="EXCEL" Width="94px" /> <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="WORD" Width="86px" /> </div> </form> </body> </html> |
Kodlarımızı yazmaya başlıyoruz. Öncelikle aşağıdaki kütüphaneleri projemize dahil ediyoruz.
1 2 3 4 5 6 |
using System.Data; using System.Data.SqlClient; using System.Configuration; using System.IO; |
Örneğimizde SQL Server’ da bulunan kutuphane veritabanında ogrenci isimli tabloyu kullanıyoruz.
Sayfa yuklendiğinde GridView içini dolduracak kodlarımızı Page_Load bölümüne ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { string cs = "Server=.;Initial Catalog=kutuphane;Integrated Security=SSPI"; using (SqlConnection con = new SqlConnection(cs)) { SqlDataAdapter da = new SqlDataAdapter("SELECT *FROM ogrenci WHERE ogrno<11",con); DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds; GridView1.DataBind(); } } } |
Şimdi de Verilerin Excel dosyasına aktarılmasını sağlayacak kodlarımızı yazalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
protected void Button1_Click(object sender, EventArgs e)//Excel { Response.ClearContent(); Response.AppendHeader("content-disposition", "attachement;filename=ogrenciListe.xls"); Response.ContentType = "application/excel"; StringWriter sw = new StringWriter(); HtmlTextWriter ht = new HtmlTextWriter(sw); GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); foreach (TableCell tableCell in GridView1.HeaderRow.Cells) { tableCell.Style["background-color"] = "#A55129"; } foreach (GridViewRow gridViewRow in GridView1.Rows) { gridViewRow.BackColor = System.Drawing.Color.White; foreach (TableCell gridViewRowTableCell in gridViewRow.Cells) { gridViewRowTableCell.Style["background-color"] = "#FFF7E7"; } } GridView1.RenderControl(ht); Response.Write(sw.ToString()); Response.End(); } |
Word dosyasına veri aktarımını sağlayacak kodlarımızı diğer butonumuza ekleyeceğiz. Buradaki kodları incelediğiniz zaman yukarıda oluşturmuş olduğumuz Excel dosyasına veri aktarımı yapan kodlarla aynı olduğunu, sadece dosya uzantısı ve dosya tipinin değiştirildiğini göreceksiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
protected void Button2_Click(object sender, EventArgs e) { //Word Aktarımı Response.ClearContent(); Response.AppendHeader("content-disposition", "attachement;filename=ogrenciListe.doc"); Response.ContentType = "application/word"; StringWriter sw = new StringWriter(); HtmlTextWriter ht = new HtmlTextWriter(sw); GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); foreach (TableCell tableCell in GridView1.HeaderRow.Cells) { tableCell.Style["background-color"] = "#A55129"; } foreach (GridViewRow gridViewRow in GridView1.Rows) { gridViewRow.BackColor = System.Drawing.Color.White; foreach (TableCell gridViewRowTableCell in gridViewRow.Cells) { gridViewRowTableCell.Style["background-color"] = "#FFF7E7"; } } GridView1.RenderControl(ht); Response.Write(sw.ToString()); Response.End(); } |
Kodlarımızı tamamlamış olduk. Sadece ufak bir ayrıntı kaldı. Bu şekilde kodlarımızı çalıştırdığımız zaman;
‘GridView’ türündeki ‘GridView1’ denetimi runat=server değerine sahip bir form etiketine yerleştirilmelidir.
hatasını alacağız. Bu hatanın çözümünü ise aşağıdaki kodları ekleyerek sağlayacağız.
1 2 3 4 5 6 |
public override void VerifyRenderingInServerForm(Control control) { } |
Bu kodu da ekledikten sonra sayfamızı çalıştırabiliriz. Word ve Excel Butonlarına bastığımız zaman dosyaların indirildiğini göreceğiz.
Excel ve Word dosyalarının içeriğine bakacak olursak GridView kontrolündeki verilerin aktarıldığını göreceğiz.
Word Dosyası:
Excel Dosyası:
default.aspx.cs kodlarının tamamı şu şekilde olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.IO; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { string cs = "Server=.;Initial Catalog=kutuphane;Integrated Security=SSPI"; using (SqlConnection con = new SqlConnection(cs)) { SqlDataAdapter da = new SqlDataAdapter("SELECT *FROM ogrenci WHERE ogrno<11",con); DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds; GridView1.DataBind(); } } } protected void Button1_Click(object sender, EventArgs e)//Excel { Response.ClearContent(); Response.AppendHeader("content-disposition", "attachement;filename=ogrenciListe.xls"); Response.ContentType = "application/excel"; StringWriter sw = new StringWriter(); HtmlTextWriter ht = new HtmlTextWriter(sw); GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); foreach (TableCell tableCell in GridView1.HeaderRow.Cells) { tableCell.Style["background-color"] = "#A55129"; } foreach (GridViewRow gridViewRow in GridView1.Rows) { gridViewRow.BackColor = System.Drawing.Color.White; foreach (TableCell gridViewRowTableCell in gridViewRow.Cells) { gridViewRowTableCell.Style["background-color"] = "#FFF7E7"; } } GridView1.RenderControl(ht); Response.Write(sw.ToString()); Response.End(); } public override void VerifyRenderingInServerForm(Control control) { } protected void Button2_Click(object sender, EventArgs e) { //Word Aktarımı Response.ClearContent(); Response.AppendHeader("content-disposition", "attachement;filename=ogrenciListe.doc"); Response.ContentType = "application/word"; StringWriter sw = new StringWriter(); HtmlTextWriter ht = new HtmlTextWriter(sw); GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); foreach (TableCell tableCell in GridView1.HeaderRow.Cells) { tableCell.Style["background-color"] = "#A55129"; } foreach (GridViewRow gridViewRow in GridView1.Rows) { gridViewRow.BackColor = System.Drawing.Color.White; foreach (TableCell gridViewRowTableCell in gridViewRow.Cells) { gridViewRowTableCell.Style["background-color"] = "#FFF7E7"; } } GridView1.RenderControl(ht); Response.Write(sw.ToString()); Response.End(); } } |
Başarılı bir yazı olmuş, sonuç almayı sağlıyor. Teşekkürler.
https://i.hizliresim.com/JlqXQq.png
resimdeki hatayı nasıl çözerim ?
Hocam siz cansınız ya vallahi ama tek bir sorun daha çıktı ben veritabanında türkçe karakter kullanıyorum bunları excel ve word yazdırdığımda doğal olarak türkçe karakter sorunu çıkıyor. Bu sorunu nasıl çözebiliriz ?
Merhaba. Herhangi bir sorun olmaması gerekiyor aslında. Benim kullandığım örnekte de Türkçe karakterler mevcut.Her ikisindede mi oluyor?
Evet hocam her ikisinde de aynı sorun çıkıyor.
excel de Response.Charset = “windows-1234”; bu kodda sıkıntı yok
word de çalışmıyor ama sıkıntı var.