GridView daki Verileri Excel Dosyasına Kaydetme-2.Metod
Bu makalede Northwind.mdb Customers alanındaki verileri Gridview nesnesinde gösterimini sağlayıp, daha sonra Excel dosyasına kaydetmeyi göreceğiz. Bir önceki metod da Tablo yöntemini ile Excel e kayıtı görmüştük. Bu örnekte de Şekil 2 deki isteğe bağlı olarak Excel e kayıt işlemini gerçekleştireceğiz. Aşağıdaki şekilleri inceleyin.
Şekil 1
Şekil 2
Şekil 3
Şekil 4
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Page.DataBind();
}
System.Data.OleDb.OleDbConnection baglan = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Northwind.mdb") + ";");
System.Data.OleDb.OleDbDataAdapter adp = new System.Data.OleDb.OleDbDataAdapter();
adp.SelectCommand = new System.Data.OleDb.OleDbCommand("Select * From Customers", baglan);
baglan.Open();
System.Data.DataSet ds = new System.Data.DataSet();
adp.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
baglan.Close();
}
protected void btnExceleKaydet_Click(object sender, EventArgs e)
{
GridView1.PagerSettings.Visible = false;
GereksizKolonlariSil();
if (RadioButtonList1.SelectedIndex == 1) // İlk 30 kayıt
{
GridView1.PageIndex = 0;
GridView1.PageSize = 30;
}
else if (RadioButtonList1.SelectedIndex == 2) // Tüm kayıtlar
GridView1.AllowPaging = false;
GridView1.DataBind(); // Yapılan değişikliklerin geçerli olması için verileri tekrar yüklüyoruz
GridiExceleKaydet();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void GereksizKolonlariSil()
{
// Eğer Select, Edit ve Delete gibi CommandFieldlar aktif ise bu butonların bulunduğu sütunu gridden çıkarıyoruz
for (int i = 0; i < GridView1.Columns.Count; i++)
{
if (GridView1.Columns[i] is CommandField)
GridView1.Columns.RemoveAt(i);
}
}
protected void GridiExceleKaydet()
{
// Oluşacak dosyaya gridview aynen aktarılacağı için hücrelerin çevrelerinin çizilmesini sağlıyoruz
GridView1.GridLines = GridLines.Both;
// Gönderilecek cevaba gridin içeriğini yazdırmak için GridView1 kontrolünü render etmek gerekli. Bu işlemleri
// StringWriter ve HtmlTextWriter nesnelerini ile yürütüyoruz. StringWriter, System.IO isim alanı altında yer alır
StringWriter stringYaz = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(stringYaz);
GridView1.RenderControl(htw);
// İstemciye gönderilecek cevabı oluşturuyoruz. Öncelikli olarak cevapta(response da) şu ana kadar oluşan
// bilgileri silip, cevabın başlık bilgisine gönderilecek dosya ile ilgili bilgileri ekliyoruz. Dosya tipini belirttikten
// sonra yukarıda oluşturulan StringWriter nesnesini ToString metodu ile cevaba yazdırıyoruz
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=Northwind.xls");
Response.ContentType = "application/ms-excel";
Response.Write(stringYaz.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
// Oluşan hata GridView1 isimli kontrolün render edilmesi esnasında alındığı için, render edilen
// kontrolün GridView1 olmadığı durumda base class taki metodunu çağırıyoruz
if (control.ID != "GridView1")
base.VerifyRenderingInServerForm(control);
}
}
//Bir sonraki makalede görüşmek üzere. Bahadır