随笔-175  评论-535  文章-1  trackbacks-27

   尝试了一下Gridview导出为Excel,原本以为很简单,可是真正应用起来还是不太好弄的,呵呵,所想非所得。总结了一下应该注意下面几点:
1.由于gridview的内容可能是分页显示的,因此,这里在每次导出excel时,先将gridview的allowpaging属性设置为false,然后databind()一下,确保搂到所有数据;
2.不用单独设置导出的路径,导出时会弹出对话框让你确认保存位置;
3.要写一个空的VerifyRenderingInServerForm方法(必须写),以确认在运行时为指定的ASP.NET 服务器控件呈现HtmlForm 控件;
4.导出后别忘记再重新设置其allowpaging属性;
   当我把这些都设置好以后,点击[导出],出现了 只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render(); ) 的错误,又检查代码,没发现问题啊,搞了一会弄不出来,然后搜索了一下,发现了解决办法:
修改你的aspx文件中的:
<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true" CodeFile="SysUser.aspx.cs" Inherits="Autho_SysUser2" %>
增加红色的部分就ok了。
下面是代码和截图:
    #region 导出为Excel
    public override void VerifyRenderingInServerForm(Control control)
    {
        // Confirms that an HtmlForm control is rendered for
    }

    private void ToExcel(Control ctl, string FileName)
    {
        HttpContext.Current.Response.Charset = "UTF-8";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);
        ctl.Page.EnableViewState = false;
        System.IO.StringWriter tw = new System.IO.StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(tw);
        ctl.RenderControl(hw);
        HttpContext.Current.Response.Write(tw.ToString());
        HttpContext.Current.Response.End();
    }

    private void toExcelClk()
    {
        gvSysUser.AllowPaging = false;
        gvSysUser.AllowSorting = false;
        gvSysUser.DataBind();
        ToExcel(gvSysUser, "OFS_Data.xls");
        gvSysUser.AllowPaging = true;
        gvSysUser.AllowSorting = true;
        gvSysUser.DataBind();
    }

    #endregion



posted on 2007-03-12 17:23 上午的绝缘杯 阅读(3616) 评论(37)  编辑 收藏 网摘 所属分类: ASP.NET

评论:
#1楼 2007-03-20 15:49 | calmzeal      
不错
发现楼主好强悍啊
和dataGrid还是有区别啊

感觉新开一个window下载比较爽
打开一个干净的aspx,不需要css直接获取数据就render

上面toExcelClk()中最后的gvSysUser.DataBind();是不是多余的啊?


  回复  引用  查看    
#2楼[楼主] 2007-03-20 17:01 | 上午的绝缘杯      
嗯,是多余的,会自己bind :)
  回复  引用  查看    
#3楼 2007-03-21 15:42 | 在北京的湖南人      
呵呵,非常好,该遇到的问题都总结了,谢谢,正好用到!
  回复  引用  查看    
#4楼 2007-03-21 16:48 | 在北京的湖南人      
呵呵,太完美了,改了gridview的名字就能用了,谢谢博主!
  回复  引用  查看    
#5楼[楼主] 2007-03-21 17:00 | 上午的绝缘杯      
呵呵,不谢,只是把自己遇到的困难写出来,大家一块研究啊:)
  回复  引用  查看    
#6楼 2007-03-27 11:28 | r3mj8[未注册用户]
我的是动态设置的列数据,用了这个代码保存的数据只有下面的数据
<div>

</div>

请帮忙,谢谢

  回复  引用    
#7楼[楼主] 2007-03-27 11:53 | 上午的绝缘杯      
动态的在gvSysUser.DataBind();之前需要再设置一下gvSysUser.selectParameters = "";然后databind,然后toExcel
出差呢,估计有的单词写的不对,呵呵~

  回复  引用  查看    
#8楼[楼主] 2007-03-27 11:56 | 上午的绝缘杯      
好像写错了,应该是selectCommand吧...
  回复  引用  查看    
#9楼 2007-04-27 16:18 | yunhuasheng      
不错。
  回复  引用  查看    
#10楼 2007-05-01 11:15 | michael[未注册用户]
有这个方法VerifyRenderingInServerForm吗?
  回复  引用    
#11楼[楼主] 2007-05-09 09:33 | 上午的绝缘杯      
有这个方法,需要重载一下才可以。
  回复  引用  查看    
#12楼 2007-05-15 11:39 | gridview[未注册用户]
我写在用户控件中报错:CS0115: “UserControl_ExpertStatistics.VerifyRenderingInServerForm(System.Web.UI.Control)”: 没有找到适合的方法来重写

public override void VerifyRenderingInServerForm(Control control)

请帮忙,谢谢

  回复  引用    
#13楼[楼主] 2007-05-16 09:08 | 上午的绝缘杯      
@gridview
VerifyRenderingInServerForm这个方法是要放在<form runat=server></form>标记中的,用户控件没有form标记所以报错。
各位高手有没有解决办法呢?

  回复  引用  查看    
#14楼 2007-05-25 18:48 | abin819[未注册用户]
有试过导出到Excel 2007吗?
好象与excel 2003不一样.

  回复  引用    
#15楼[楼主] 2007-05-29 13:56 | 上午的绝缘杯      
导出到excel2007还没有试过,哪位有环境的测试一下啊?
  回复  引用  查看    
#16楼 2007-11-27 13:28 | cyberspace[未注册用户]
楼主这个有点小问题,就是当某一字段的值为纯数字串的时候,比如:02356235623 这样的,导出后前面的0都会丢失,不知道怎么能解决下呀?请楼主指点,谢谢!
  回复  引用    
#17楼 2007-12-14 10:17 | help me~[未注册用户]
当数据库中的列为char(13)型,里边的数据都是数据,即长为13位的整数。导出excel的时候,excel会默认转换成科学记数法。如何在程序中避免这种情况?
  回复  引用    
#18楼 2007-12-27 11:53 | usersh[未注册用户]
有没有程序的源码,发一份到我的油箱好吗?我的油箱是czglover@163.com
  回复  引用    
#19楼 2008-01-02 19:57 | 黎明[未注册用户]
用您的部分代码无法生成页,在网上找了很多代码都这样,只因我太菜,能发一份源码给我吗?最好是直接写入本地d:print.xls不出现保存路径提示的。
  回复  引用    
#20楼 2008-01-31 15:57 | usersh[未注册用户]
很好很有用,但是在2003下导出后,汉字出现乱码是怎么回事
  回复  引用    
#21楼 2008-01-31 16:07 | usersh[未注册用户]
找到了,将HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8改成HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.getenconding("GB2312");

和将HttpContext.Current.Response.Charset = "UTF-8";
改成HttpContext.Current.Response.Charset = "GB2312";

  回复  引用    
#22楼 2008-02-22 09:52 | demo1[未注册用户]
我的是动态设置的列数据,用了这个代码保存的数据只有下面的数据
<div>

</div>

请帮忙,谢谢

  回复  引用    
#23楼 2008-04-22 17:03 | 猫哥[未注册用户]
@上午的绝缘杯
也没有selectCommand这个项啊

  回复  引用    
#24楼 2008-07-17 16:33 | Bluer      
谢谢....
学习了.....

  回复  引用  查看    
#25楼 2008-07-22 17:54 | 得到[未注册用户]
大哥 为什么我总是报错 说
服务器无法在发送 HTTP 标头之后设置内容类型
这是什么原因啊

  回复  引用    
#26楼 2008-07-23 09:10 | 时间太快      
导出到2003可以显示,可是如果用2007打开的话,那就会无法打开。。你们有没有碰到过这样的问题。
  回复  引用  查看    
#27楼 2008-07-31 08:48 | hyb1215[未注册用户]
用户控件,没有EnableEventValidation = "false" 这个方法,怎么改善???????????????????????????
  回复  引用    
#28楼 2008-08-02 11:01 | 蔡鳥[未注册用户]
--引用--------------------------------------------------
r3mj8: 我的是动态设置的列数据,用了这个代码保存的数据只有下面的数据
<br>&lt;div&gt;
<br>
<br>&lt;/div&gt;
<br>
<br>请帮忙,谢谢
--------------------------------------------------------
動態邦定的要將
gvSysUser.DataBind();
ToExcel(gvSysUser, "OFS_Data.xls");
改爲
databindgv();//自己定義的挷定函數
ToExcel(gvSysUser, "OFS_Data.xls");





  回复  引用    
#29楼 2008-08-07 16:03 | Davis Sun[未注册用户]
谢谢楼主,谢谢。
  回复  引用    
#30楼 2008-08-08 15:59 | wlj[未注册用户]
非常好,不错,
  回复  引用    
#31楼 2008-08-28 11:39 | alasunny      
谢谢博主,方法很好。
先开始我导出的只有<br></br>
但是听从了
#28楼 2008-08-02 11:01 | 蔡鳥
動態邦定的要將
gvSysUser.DataBind();
ToExcel(gvSysUser, "OFS_Data.xls");
改爲
databindgv();//自己定義的挷定函數
ToExcel(gvSysUser, "OFS_Data.xls");
后正常了。
感谢各位

  回复  引用  查看    
#32楼 2008-09-05 14:14 | zhan[未注册用户]
'BBA.Control' is a 'namespace' but is used like a 'type'

private void ToExcel(Control ctl, string FileName) 的"Control "有误,为什么?

  回复  引用    
#33楼 2008-10-13 14:29 | 残儿[未注册用户]
呵呵,我试一下,在2007中也能用,只是打开的时候会出现格式不一致的警示窗口。除了每次打开的时候点着麻烦点,不影响正确显示。
  回复  引用    
#34楼 2008-11-13 10:53 | frost[未注册用户]
感谢啊感谢 呵呵
  回复  引用    
#35楼 2009-01-20 11:32 | kevin.zhan      
导出的EXCEL没有网格线的?怎样才能显示网格线呢?
  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 672171




相关文章:

相关链接: