asp.net gridview 导出到excel

本文介绍如何将ASP.NET中的GridView控件内容导出到Excel文件。通过在按钮点击事件中隐藏不需要的列,设置特定列的数据格式,并调整响应头,最终将GridView内容转换成UTF-7编码的Excel文件供用户下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要把GridView控件放到panel中

添加一个按钮,用于触发导出事件:

  <asp:LinkButton ID="lbtnexcel" runat="server" Text="导出到Excel" OnClick="lbtnexcel_Click"></asp:LinkButton>

  以上为aspx页面代码,后台代码则是:

  protected void lbtnexcel_Click(object sender, EventArgs e)

  {

  gridview1.BottomPagerRow.Visible = false;//导出到Excel表后,隐藏分页部分

  gridview1.Columns[9].Visible = false;//隐藏“编辑”列

  gridview1.Columns[10].Visible = false;//隐藏“删除”列

  DateTime dt = DateTime.Now;//给导出后的Excel表命名,结合表的用途以及系统时间来命名

  string filename = dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Second.ToString();

  /*如导出的表中有某些列为编号、身份证号之类的纯数字字符串,如不进行处理,则导出的数据会默认为数字,例如原字符串"0010"则会变为数字10,字符串"1245787888"则会变为科学计数法1.236+E9,这样便达不到我们想要的结果,所以需要在导出前对相应列添加格式化的数据类型,以下为格式化为字符串型*/

  foreach (GridViewRow dg in this.gridview1.Rows)

  {

  dg.Cells[0].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");

  dg.Cells[5].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");

  dg.Cells[6].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");

  dg.Cells[8].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");

  }

  Response.Clear();

  Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("学生表" + filename, System.Text.Encoding.UTF8) + ".xls");//导出文件命名

  Response.ContentEncoding = System.Text.Encoding.UTF7;//如果设置为"GB2312"则中文字符可能会乱码

  Response.ContentType = "applicationshlnd.xls";

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

  System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);

  Panel1.RenderControl(oHtmlTextWriter);//Add the Panel into the output Stream.

  Response.Write(oStringWriter.ToString());//Output the stream.

  Response.Flush();

  Response.End();

  }

  //重载VerifyRenderingInServerForm方法,否则运行的时候会出现如下错误提示:“类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内”

  public override void VerifyRenderingInServerForm(Control control)

  {

  //override VerifyRenderingInServerForm.

  }

  搞定!





出错说明 :
C#中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation;"个问题?
后台: /// <summary>     /// 此方法必重写,否则会出错     /// </summary>     /// <param name="control"></param>     public override void VerifyRenderingInServerForm(Control control)     {     }   前台页面通过修改页文件可以修正这个问题:EnableEventValidation = "false".    <%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值