苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V1.3) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V1.9) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 9509|回复: 6

[Excel] C#GridViewExport帮助类,美化导出

[复制链接]
  • TA的每日心情
    开心
    昨天 10:45
  • 签到天数: 641 天

    [LV.9]以坛为家II

    发表于 2013-3-13 10:43:17 | 显示全部楼层 |阅读模式
                                C#GridViewExport帮助类
    导读部分
    -------------------------------------------------------------------------------------------------------------
    C#基类库苏飞版--系列教程导航
    http://www.sufeinet.com/thread-655-1-1.html

    下载之前你首先要注册成为会员哦,注册之后就可以直接下载啦

    主要功能如下
    1.将整GridView的数据导出到Excel中关增加一个效果线做美化
    最新的GridViewExport操作类
    看下面代码吧
    [C#] 纯文本查看 复制代码
    /// <summary>
    /// 类说明:GridViewExport
    /// 编 码 人:苏飞
    /// 联系方式:361983679  
    /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http://www.sufeinet.com/thread-655-1-1.html[/url]
    /// </summary>
    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();
            }
    
        }
    }
    

    本帖被以下淘专辑推荐:

    该用户从未签到

    发表于 2013-4-14 10:19:54 | 显示全部楼层

    该用户从未签到

    发表于 2013-5-5 12:58:26 | 显示全部楼层

    该用户从未签到

    发表于 2014-4-2 08:39:15 | 显示全部楼层
  • TA的每日心情

    2017-2-19 09:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-11-7 22:45:37 | 显示全部楼层
  • TA的每日心情
    慵懒
    2018-4-2 21:16
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-1-16 22:04:04 | 显示全部楼层

    该用户从未签到

    发表于 2016-3-25 21:35:30 | 显示全部楼层
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则

    QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1 )

    GMT+8, 2018-12-11 01:24

    © 2017-2018

    快速回复 返回顶部 返回列表