《WebForm开发系列高级篇》Item2导出EXCEL通用类(GridView,DataList,Repeater,DetailView)
1.导出效果图:
2.C#导出EXCEL通用类源代码:
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Text;
using System.Drawing;
///
///CommonClass 的摘要说明
///
public class CommonClass
{
public CommonClass()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public static void ReportToExcel(System.Web.UI.Control ctl, string fileName)
{
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF7;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName + ".xls", Encoding.UTF8).ToString());
ClearChildControls(ctl);
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
ctl.RenderControl(htw);
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
private static void RecursiveClear(Control control)
{
for (int i = control.Controls.Count - 1; i >= 0; i--)
{
RecursiveClear(control.Controls[i]);
}
if (control is Repeater)
{
control.Parent.Controls.Remove(control);
}
else if (control is LinkButton)
{
LiteralControl literal = new LiteralControl();
control.Parent.Controls.Add(literal);
literal.Text = ((LinkButton)control).Text;
control.Parent.Controls.Remove(control);
}
else if (control is Button)
{
control.Parent.Controls.Remove(control);
}
else if (control is System.Web.UI.WebControls.Image)
{
if (((System.Web.UI.WebControls.Image)control).Visible)
{
control.Parent.Controls.Add(new LiteralControl("o"));
}
control.Parent.Controls.Remove(control);
}
else if (control is ListControl)
{
LiteralControl literal = new LiteralControl();
control.Parent.Controls.Add(literal);
try
{
literal.Text = ((ListControl)control).SelectedItem.Text;
}
catch
{
}
control.Parent.Controls.Remove(control);
}
return;
}
protected static void ClearChildControls(Control dg1)
{
if (dg1 is GridView)
{
GridView dg = (GridView)dg1;
for (int i = dg.Columns.Count - 1; i >= 0; i--)
{
if (dg.Columns[i].GetType().Name == "ButtonColumn"
|| dg.Columns[i].GetType().Name == "CheckBoxField"
|| dg.Columns[i].GetType().Name == "CommandField")
{
dg.Columns[i].Visible = false;
}
}
RecursiveClear(dg1);
}
else
{
RecursiveClear(dg1);
}
}
}
3.调用方法:
CommonClass.ReportToExcel(GridView1, "从GridView导出的EXCEL");(责任编辑:51CSharp.net)
转载于:https://www.cnblogs.com/Sue_/articles/1663422.html
《WebForm开发系列高级篇》Item2导出EXCEL通用类(GridView,DataList,Repeater,DetailView)相关推荐
- NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中
由于XSSFWorkbook类型的Write方法限制,Write完成后就自动关闭流数据,所以无法很好的支持的Web模式,网上目前也未找到好的解决方案. 注意:若直接使用在WinForm项目中,必需先下 ...
- 微信接口开发之高级篇系列【网页授权获取用户基本信息】
PHP微信接口开发之高级篇之网页授权获取用户基本信息 二.WEB开发工具 转载于:https://www.cnblogs.com/tinywan/p/5860981.html
- arcgis开发 多版本之间如何兼容_arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)...
你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...
- JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况——保姆级别,真的不能再详细了,代码拿来即用)
JAVA导出Excel通用工具--第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选.动态合并横向(纵向)单元格等多种复杂情况--保姆级别,真的不能再详细了,封装通用工具类,代码拿 ...
- 微信小程序购物商城系统开发系列-工具篇
微信小程序购物商城系统开发系列-工具篇 微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操 ...
- java ee 6 源码_Java EE 6开发手册·高级篇(第4版)
资源名称:Java EE 6开发手册·高级篇(第4版) 内容简介: <Java EE 6 开发手册?高级篇(第4 版)>是一本面向实战.以示例为驱动.在Java 平台企业版6(Java E ...
- java技术教程视频_Spring开发视频教程高级篇+源码(400M)33讲
Spring开发视频教程高级篇+源码(400M)33讲 01_全面阐释Spring及其各项功能.rar 02_搭建与测试Spring的开发环境.rar 03_编码剖析Spring管理Bean的原理.r ...
- JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil
实战 导出就是将List转化为Excel(listToExcel) 导入就是将Excel转化为List(excelToList) 导入导出中会出现各种各样的问题,比如:数据源为空.有重复行等,我自定义 ...
- JavaScript导出Excel通用代码。
2019独角兽企业重金招聘Python工程师标准>>> js导出Excel通用代码. html代码如下: <!DOCTYPE html PUBLIC "-//W3C/ ...
最新文章
- pyhanlp 中文词性标注与分词简介
- 自己录制的Linux视频教程
- SD-WAN和MPLS有什么用途?
- Android关机流程源码分析
- 机房那么大,我想用AR来看看!
- Java多线程两种实现方式的对比
- 【Linux系统编程】I/O多路复用select、poll、epoll的区别使用
- CC框架实践(1):实现登录成功再进入目标界面功能
- C语言 实现登录注册功能
- 安装meme_新的Meme订单:通过简单的浏览器缓存更改游戏
- 项目中出现specify @BootstrapWith‘s ‘value‘ attribute or make the default bootstrapper class avail
- Zabbix官方文件Zabbix图形树
- 【转】从机器学习谈起
- 计算机配置显示器,电脑怎么配置多台显示器
- 12306车站信息爬取(1)——实现站点所有信息的查询
- android settings过渡动画,华为过渡动画
- Revisiting Domain Generalized Stereo Matching Networks from a FeatureConsistency Perspective
- Excel如何将两列数据左右调换位置
- 深度学习与ArcGIS概述(1)
- 云e办学习笔记(二十七)邮件自动发送功能实现