C# ile yapılan bir web sayfası içinde kullanılan datagrid içindeki veriyi butona tıklandığında doğrudan bilgisayara excel olarak indirme işlemi yapabilecek method şu şekildedir:
.aspx dosyası
<asp:Button ID ="ExcelButton" runat="server" Text ="EXCEL" CssClass =" btn-tab" Style="text-align: center;color:cornflowerblue;font-size: small; font-weight : bold;background-color:aliceblue; vertical-align: middle; background-image: url('../img/Excel-icon.png'); background-position: left center; background-repeat: no-repeat;" BorderWidth="0px" Enabled="true" OnClick="ExportToExcel_Click"/>
Bu projede iki farklı ekran ve grid kullanıldığından öncelikle seçilen grid’e göre excel oluşturulacak.
protected void SelectGridView(GridView gridView, string ExcelName)
{
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", ExcelName+".xls"));
// Türkçe karakterlerde hata vermemesi için eklendi.
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gridView.AllowPaging = false;
if (gridView == GridView2)
{
//GridView2 bind yapıldığı method
ShowData2();
}
else
{
//GridView1 bind yapıldığı method
ShowData();
}
//Kolon isimlerinin rengi verilmektedir
gridView.HeaderRow.Style.Add("background-color", "#FFFFFF");
for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++)
{
gridView.HeaderRow.Cells[i].Style.Add("background-color", "#df5015");
}
//Gridin ilk kolonu buton olduğundan o kısımın excele export edilmesini engeller.
gridView.HeaderRow.Cells[0].Visible = false;
// her satır için bir buton olduğu için gridde bu şekilde her satırın ilk kolonu kaldırılacak.
for (int i = 0; i < gridView.Rows.Count; i++)
{
GridViewRow row = gridView.Rows[i];
row.Cells[0].Visible = false;
}
// render işleminde hata almaması için aspx sayfasının en başına
EnableEventValidation="false" eklenmelidir.
gridView.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
// gridview Render işlemi için gerekmektedir.
public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
{
/* Verifies that the control is rendered */
}
Excel butonuna tıklandığında dropdown ile seçilen ekrana göre şekillenip grid’i excel olarak alacak method şu şekildedir :
protected void ExportToExcel_Click(object sender, EventArgs e)
{
if (DropDownList1.SelectedIndex == 0)
{
SelectGridView(GridView2, "GridView2_Data");
}
else
{
SelectGridView(GridView1, "GridView1_Data");
}
}