• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

GridView在C#中导出Excel的方法实例

c# 搞代码 4年前 (2022-01-09) 26次浏览 已收录 0个评论

本篇文章主要介绍了C#实现GridView导出Excel实例代码,这里整理了详细的代码,非常具有实用价值,需要的朋友可以参考下。

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[i];    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[i].GetType() == typeof(BoundField))     s.Append("<td>" + grid.Columns[i].HeaderText + "</td>");    //s.Append("<td>" + grid.Columns[i].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]).DataF<em>本文来源[email protected]搞@^&代*@码2网</em>ield].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();  } }}

以上就是GridView在C#中导出Excel的方法实例的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:GridView在C#中导出Excel的方法实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址