首页 > 代码库 > C#GridViewExport帮助类,美化导出

C#GridViewExport帮助类,美化导出

1.将整GridView的数据导出到Excel中关增加一个效果线做美化

最新的GridViewExport操作类

 

 

using System.Data;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.IO;using System.Text; namespace DotNet.Utilities{    /// <summary>    /// Summary description for GridViewExport    /// </summary>    public class GridViewExport    {        public GridViewExport()        {            //            // TODO: Add constructor logic here            //        }         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";            //HttpContext.Current.Response.Charset = "utf-8";              using (StringWriter sw = new StringWriter())            {                using (HtmlTextWriter htw = new HtmlTextWriter(sw))                {                    //  Create a form to contain the grid                    Table table = new Table();                    table.GridLines = GridLines.Both;  //单元格之间添加实线                     //  add the header row to the table                    if (gv.HeaderRow != null)                    {                        PrepareControlForExport(gv.HeaderRow);                        table.Rows.Add(gv.HeaderRow);                    }                     //  add each of the data rows to the table                    foreach (GridViewRow row in gv.Rows)                    {                        PrepareControlForExport(row);                        table.Rows.Add(row);                    }                     //  add the footer row to the table                    if (gv.FooterRow != null)                    {                        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;                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())                {                    PrepareControlForExport(current);                }            }        }          /// <summary>        /// 导出Grid的数据(全部)到Excel        /// 字段全部为BoundField类型时可用        /// 要是字段为TemplateField模板型时就取不到数据        /// </summary>        /// <param name="grid">grid的ID</param>        /// <param name="dt">数据源</param>        /// <param name="excelFileName">要导出Excel的文件名</param>        public static void OutputExcel(GridView grid, DataTable dt, string excelFileName)        {            Page page = (Page)HttpContext.Current.Handler;            page.Response.Clear();            string fileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(excelFileName));            page.Response.AddHeader("Content-Disposition", "attachment:filename=" + fileName + ".xls");            page.Response.ContentType = "application/vnd.ms-excel";            page.Response.Charset = "utf-8";             StringBuilder s = new StringBuilder();            s.Append("<HTML><HEAD><TITLE>" + fileName + "</TITLE><META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body>");             int count = grid.Columns.Count;             s.Append("<table border=1>");            s.AppendLine("<tr>");            for (int i = 0; i < count; i++)            {                 if (grid.Columns.GetType() == typeof(BoundField))                    s.Append("<td>" + grid.Columns.HeaderText + "</td>");                 //s.Append("<td>" + grid.Columns.HeaderText + "</td>");             }            s.Append("</tr>");             foreach (DataRow dr in dt.Rows)            {                s.AppendLine("<tr>");                for (int n = 0; n < count; n++)                {                    if (grid.Columns[n].Visible && grid.Columns[n].GetType() == typeof(BoundField))                        s.Append("<td>" + dr[((BoundField)grid.Columns[n]).DataField].ToString() + "</td>");                 }                s.AppendLine("</tr>");            }             s.Append("</table>");            s.Append("</body></html>");             page.Response.BinaryWrite(System.Text.Encoding.GetEncoding("utf-8").GetBytes(s.ToString()));            page.Response.End();        }     }}