zoukankan      html  css  js  c++  java
  • C#实现GridView导出Excel

    实现GridView导出Excel的详细代码如下

    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[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())
                    {
                        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[i].GetType() == typeof(BoundField))
                        s.Append("<td>" + grid.Columns[i].HeaderText + "</td>");
    
                    //s.Append("<td>" + grid.Columns[i].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();
            }
    
        }
    }
  • 相关阅读:
    CMake 用法导览
    Irrlicht 1.8.4 + Win7 + VC2015 + x64 +OpenGL编译
    VirtualBox 5.1.14 获取VirtualBox COM对象错误
    CGAL Manual/tutorial_hello_world.html
    CGAL 介绍
    Open CASCADE 基础类(Foundation Classes)
    OpenCASCADE 基础
    Nginx 反向代理详解
    修改docker容器中的hosts文件
    Jmeter 设置连接oracle数据库
  • 原文地址:https://www.cnblogs.com/rushme/p/6613987.html
Copyright © 2011-2022 走看看