• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.net数据导出到Excel

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在做asp.net程序时涉及到数据显示的时候多数会要求打印,而网页上的打印格式往往又不能满足需求,经常用的方法就是导入到Excel以后再进行打印。(仿佛这已经是老生常谈)今天在网上搜了一段打印的代码,觉得不错,需要打印的朋友可以看看。

网上好些代码的原理大致与此类似,同样都存在一个问题,就是:

类型“GridView”的控件“ctl00_center_GridView1”必须放在具有 runat=server 的窗体标记内。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息:System.Web.HttpException: 类型“GridView”的控件“ctl00_center_GridView1”必须放在具有 runat=server 的窗体标记内。

这段错误描述是我在注释了这段程序是报的错,

    //public override void VerifyRenderingInServerForm(Control control)
    
//{
    
//    //base.VerifyRenderingInServerForm (control);
    
//}

虽然这个方法里的内容也被注释了,也就是说这是个空方法,但是如果没有个方法,程序就会报上面那个错误。最初见到这段错误说明是想到了以前做ajax程序时报的一个错误很是类似。同样是因为没有重写VerifyRenderingInServerForm方法所致。在此提醒使用的朋友注意,下面贴出导出到Excel的代码

 


    public class ExportHelper
    {

        
public static void ExportToExcel(IList dataList, string[] fields, string[] headTexts, string title)
        {
            GridView gvw 
= new GridView();
            
int ColCount, i;

            
//如果筛选的字段和对应的列头名称个数相对的情况下只导出指定的字段
            if (fields.Length != 0 && fields.Length == headTexts.Length)
            {
                ColCount 
= fields.Length;
                gvw.AutoGenerateColumns 
= false;

                
for (i = 0; i < ColCount; i++)
                {
                    BoundField bf 
= new BoundField();
                    bf.DataField 
= fields[i];
                    bf.HeaderText 
= headTexts[i];
                    gvw.Columns.Add(bf);
                }
            }
            
else
            {
                gvw.AutoGenerateColumns 
= true;
            }

            SetStype(gvw);
            gvw.DataSource 
= dataList;
            gvw.DataBind();

            ExportToExcel(gvw, title);
        }
        
/// <summary>
        
/// 导出数据到Excel
        
/// </summary>
        
/// <param name="DataList">IList Data</param>
        
/// <param name="Fields">要导出的字段</param>
        
/// <param name="HeadName">字段对应显示的名称</param>
        public static void ExportToExcel(IList dataList, string[] fields, string[] headTexts)
        {
            ExportToExcel(dataList, fields, headTexts, 
string.Empty);
        }

        
/// <summary>
        
/// 设置样式
        
/// </summary>
        
/// <param name="gvw"></param>
        private static void SetStype(GridView gvw)
        {
            gvw.Font.Name 
= "Verdana";
            gvw.BorderStyle 
= System.Web.UI.WebControls.BorderStyle.Solid;
            gvw.HeaderStyle.BackColor 
= System.Drawing.Color.LightCyan;
            gvw.HeaderStyle.ForeColor 
= System.Drawing.Color.Black;
            gvw.HeaderStyle.HorizontalAlign 
= System.Web.UI.WebControls.HorizontalAlign.Center;
            gvw.HeaderStyle.Wrap 
= false;
            gvw.HeaderStyle.Font.Bold 
= true;
            gvw.HeaderStyle.Font.Size 
= 10;
            gvw.RowStyle.Font.Size 
= 10;
        }
        
/// <summary>
        
/// 导出GridView中的数据到Excel
        
/// </summary>
        
/// <param name="gvw"></param>
        
/// <param name="DataList"></param>
        public static void ExportToExcel(GridView gvw, string title)
        {
            
string fileName;
            HttpContext.Current.Response.Buffer 
= true;
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            fileName 
= string.Format("xhmd{0:yyMMddHHmm}.xls", DateTime.Now);
            HttpContext.Current.Response.AppendHeader(
"Content-Disposition""attachment;filename=" + fileName);
            HttpContext.Current.Response.ContentType 
= "application/vnd.ms-excel";
            StringWriter tw 
= new System.IO.StringWriter();
            HtmlTextWriter hw 
= new System.Web.UI.HtmlTextWriter(tw);
            gvw.RenderControl(hw);
            
if (!string.IsNullOrEmpty(title))
            {
                HttpContext.Current.Response.Write(
"<b><center><font size=3 face=Verdana color=#0000FF>" + title + "</font></center></b>");
            }
            HttpContext.Current.Response.Write(tw.ToString());
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.Close();
            HttpContext.Current.Response.End();

            gvw.Dispose();
            tw.Dispose();
            hw.Dispose();

            gvw 
= null;
            tw 
= null;
            hw 
= null;

        }
        
public static void DataTable2Excel(System.Data.DataTable dtData) 
        { 
            System.Web.UI.WebControls.DataGrid dgExport 
= null
           
// 当前对话 
            System.Web.HttpContext curContext = System.Web.HttpContext.Current; 
            
// IO用于导出并返回excel文件 
            System.IO.StringWriter strWriter = null
            System.Web.UI.HtmlTextWriter htmlWriter 
= null
 
            
if (dtData != null
           { 
                
// 设置编码和附件格式 
               curContext.Response.ContentType = "application/vnd.ms-excel"
               curContext.Response.ContentEncoding 
=System.Text.Encoding.UTF8; 
               curContext.Response.Charset 
= ""
                 
                
// 导出excel文件 
               strWriter = new System.IO.StringWriter(); 
               htmlWriter 
= new System.Web.UI.HtmlTextWriter(strWriter); 

               
// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid 
                dgExport = new System.Web.UI.WebControls.DataGrid(); 
                dgExport.DataSource 
= dtData.DefaultView; 
                dgExport.AllowPaging 
= false
                dgExport.DataBind(); 
 
                
// 返回客户端 
                dgExport.RenderControl(htmlWriter);     
                curContext.Response.Write(strWriter.ToString()); 
                curContext.Response.End(); 
            } 
        } 


    }


再附加一句:建议大家再上传代码的时候尽量不要显示行号。因为今天在找一段代码时,恰好该文作者显示行号,直接复制下来,根本无法直接运行,无奈先放入文本编辑器,又放入world,进行查找替换所有数字,很是麻烦,希望大家可以谅解。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【摘录】asp.netCookie操作(续)发布时间:2022-07-10
下一篇:
.NET模块-深入理解ASP.NETMVC(7)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap