/EQT_V2/EQT/EQTWebApp/App_Code/GridViewExportUtil.cs
http://sgsoft-las.googlecode.com/ · C# · 110 lines · 82 code · 10 blank · 18 comment · 15 complexity · c69702d96a14fb08e420e0ab526e0585 MD5 · raw file
- using System;
- using System.Data;
- using System.Configuration;
- using System.IO;
- 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;
-
- /// <summary>
- ///
- /// </summary>
- public class GridViewExportUtil
- {
- /// <summary>
- ///
- /// </summary>
- /// <param name="fileName"></param>
- /// <param name="gv"></param>
- public static void Export(string fileName, GridView gv)
- {
- HttpContext.Current.Response.Clear();
- HttpContext.Current.Response.AddHeader(
- "content-disposition", string.Format("attachment; filename={0}", fileName));
- HttpContext.Current.Response.ContentType = "application/ms-excel";
-
- using (StringWriter sw = new StringWriter())
- {
- using (HtmlTextWriter htw = new HtmlTextWriter(sw))
- {
- // Create a form to contain the grid
- Table table = new Table();
-
- table.GridLines = gv.GridLines;
-
- // add the header row to the table
- if (gv.HeaderRow != null)
- {
- GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
- table.Rows.Add(gv.HeaderRow);
- }
-
- // add each of the data rows to the table
- foreach (GridViewRow row in gv.Rows)
- {
- GridViewExportUtil.PrepareControlForExport(row);
- table.Rows.Add(row);
- }
-
- // add the footer row to the table
- if (gv.FooterRow != null)
- {
- GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
- table.Rows.Add(gv.FooterRow);
- }
-
- // render the table into the htmlwriter
- table.RenderControl(htw);
-
- // render the htmlwriter into the response
- HttpContext.Current.Response.Write(sw.ToString());
- HttpContext.Current.Response.End();
- }
- }
- }
-
- /// <summary>
- /// Replace any of the contained controls with literals
- /// </summary>
- /// <param name="control"></param>
- private static void PrepareControlForExport(Control control)
- {
- for (int i = 0; i < control.Controls.Count; i++)
- {
- Control current = control.Controls[i];
- if (current is LinkButton)
- {
- control.Controls.Remove(current);
- control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
- }
- else if (current is ImageButton)
- {
- control.Controls.Remove(current);
- control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
- }
- else if (current is HyperLink)
- {
- control.Controls.Remove(current);
- control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
- }
- else if (current is DropDownList)
- {
- control.Controls.Remove(current);
- control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
- }
- else if (current is CheckBox)
- {
- control.Controls.Remove(current);
- control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
- }
-
- if (current.HasControls())
- {
- GridViewExportUtil.PrepareControlForExport(current);
- }
- }
- }
- }