ASP.NET 自定义控件导出Excel

昨天在做项目的时候遇到个小问题,如何将自定义控件中的Gridview的数据导出成Excel.

代码如下:

   Response.Clear();

        Response.Buffer = true;

        Response.Charset = "GB2312";

        Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");

        // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!

        Response.ContentEncoding = System.Text.Encoding.UTF7;

        Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。

        System.IO.StringWriter ws= new System.IO.StringWriter();

        HtmlTextWriter htw = new HtmlTextWriter(sw);

        gvUsers.RenderControl(oHtmlTextWriter);

        Response.Output.Write(sw.ToString());

        Response.Flush();

        Response.End();

但是有个问题.该代码只能建立在当前页面是一个Page的情况下使用.

也就是说如果你把要导出的Gridview放在一个页面下使用上面的代码是可以成功的.


但是我的页面里有一个自定义的WebControl,要导出的Gridview是放在该自定义的WebControl中的,导出成Excel代码依然为上面代码,这时该会报以下错误:


怎么解决呢?

我们只好这样做:

在放这个自定义控件的Page下重写Page的VerifyRenderingInServerForm方法.

Page下增加如下代码:

public override void VerifyRenderingInServerForm(Control control)

{}

那么这个方法是干什么的呢?

该方法是确认在运行时为指定的 ASP.NET 服务器控件呈现 HtmlForm 控件。

那为什么要重写该方法而不去做任何事情呢?哪位大虾解释下.看了msdn的帮助依然不懂.

转载于:https://www.cnblogs.com/winnerzone/archive/2007/08/06/844559.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
protected void Button1_Click(object sender, EventArgs e) { System.Web.HttpContext curContext = System.Web.HttpContext.Current; if (dt != null) { string filename = "档案全宗"; string name1 = filename; filename = HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8); HttpResponse resp = System.Web.HttpContext.Current.Response; resp.Charset = "utf-8"; resp.Clear(); resp.AppendHeader("Content-Disposition", "attachment;filename=" + filename + ".xls"); resp.ContentEncoding = System.Text.Encoding.UTF8; resp.ContentType = "application/ms-excel"; string style ="<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=utf-8\"/>"+ "<style> .table{ font: 9pt Tahoma, Verdana; color: #000000; text-align:center; background-color:#8ECBE8; }.table td{text-align:center;height:21px;background-color:#EFF6FF;}.table th{ font: 9pt Tahoma, Verdana; color: #000000; font-weight: bold; background-color: #8ECBEA; height:25px; text-align:center; padding-left:10px;}</style>"; resp.Write(style); //resp.Write(ExportTable(list)); resp.Write("<table class='table'><tr><th>" +"文件标题"+ "</th><th>" + "档案类别" + "</th><th>" +"发文日期" + "</th><th>" +"文件链接" + "</th><th>" +"备注" + "</th></tr>"); //VideoList = (List<subShiyongModel>)Session["dbVideoList"]; for(int i=0;i<dt.Rows.Count;i++) { resp.Write("<tr><td>" + dt.Rows[i]["FileName"]+ "</td>"); resp.Write("<td>" +dt.Rows[i]["type"]+ "</td>"); resp.Write("<td>" + dt.Rows[i]["fromtime"].ToString()+ "</td>"); resp.Write("<td>" + dt.Rows[i]["url"]+ "</td>"); resp.Write("<td>" + dt.Rows[i]["beizhu"]+ "</td>"); resp.Write("</tr>"); } resp.Write("<table>"); resp.Flush(); resp.End(); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值