GridView To Excel
原文来自:http://gridviewguy.com/ArticleDetails.aspx?articleID=197
介绍:
将GridView的内容导出到Excel是很普通的应用,在很多网站上都有使用。有各种不同的技术来实现GridView导出到Excel中,主要是看应用程序的具体情况。在本文中我将演示一些你会觉得有用的技巧。
从GridView导出到Excel(基础代码)
让我们从基础的导出方法开始。首先,我们需要用一些数据填充GridView。我创建了一个自定义的数据表,它包含了多个字段。你可以在下面的截图中看到。
现在,下一步的任务是使用数据库中的数据来填充GridView。试一试下面的代码,它使用DataSet来填充GridView。
2 {
3
4SqlConnection myConnection = new SqlConnection("Server=localhost;Database=School;Trusted_Connection=true");
5
6SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Users", myConnection);
7
8DataSet ds = new DataSet();
9
10ad.Fill(ds);
11
12gvUsers.DataSource = ds;
13
14gvUsers.DataBind();
15
16}
17
18
所以GridView现在已经填充了数据。接下去的任务就是将GridView导出到Excel。你可以在button的click事件中使用下面的代码。
2
3 Response.AddHeader( " content-disposition " , " attachment; filename=MyExcelFile.xls " );
4
5 Response.ContentType = " application/excel " ;
6
7 StringWriter sw = new StringWriter();
8
9 HtmlTextWriter htw = new HtmlTextWriter(sw);
10
11 gvUsers.RenderControl(htw);
12
13 Response.Write(sw.ToString());
14
15 Response.End();
16
你同时还要重载VerifyRenderingInServerForm方法。参照下面的代码。
{
}
当你点击Export to Excel按钮之后,将会弹出一个对话框让你选择打开或者是保存导出的文件。选择打开文件,你会看到导出的数据显示在Excel的页面中。看一看下面的截图,它显示了GridView已导出到Excel中。
GridView附带样式导出到Excel中
你有没有发现上面导出代码的问题?对了,开头的0都被截去了。这表示如果ID是000345,它会显示为345。你可以在输出的数据流中添加CSS描述来解决该问题。为了能正确的显示ID列,你要把它存储为文本。文本格式在Excel中用“mso-number-format:"/@”来表示。只要你知道了这个格式,你就可以将这个样式添加到输出的数据流中。看看下面的代码吧。
2 {
3
4string style = @"<style> .text { mso-number-format:/@; } </script> ";
5
6Response.ClearContent();
7
8Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
9
10Response.ContentType = "application/excel";
11
12StringWriter sw = new StringWriter();
13
14HtmlTextWriter htw = new HtmlTextWriter(sw);
15
16gvUsers.RenderControl(htw);
17
18// Style is added dynamically
19
20Response.Write(style);
21
22Response.Write(sw.ToString());
23
24Response.End();
25
26}
27
28 public override void VerifyRenderingInServerForm(Control control)
29 {
30
31}
32
正如你在上面的代码中所看到的,我使用字符串变量“style”来存放GridView中列的样式。同时,我使用Response.Write方法来将样式写入到输出流中。最后你要做的就是将样式添加到ID列。这可以在GridView控件的RowDataBound事件中完成。GridView到Excel,该文件的内容会类似于下图。
2 {
3
4if (e.Row.RowType == DataControlRowType.DataRow)
5
6{
7
8e.Row.Cells[1].Attributes.Add("class", "text");
9
10}
11
12}
13
现在,当你导出
查看表格栏的样式
你打开导出后的Excel文件就可以轻而易举的找到GridView中数据栏的正确样式。现在点击标题栏并选择“设置单元格格式”,它将显示一些参数用来格式化单元格。选择“文本”并把文件保存为.htm文件。现在,用浏览器打开这个Web文件,然后查看它的源文件。你会在样式段落发现不同的单元格所对应的样式。使用查找功能定位到ID栏。你将发现类似于下面的一行内容:
<td class=xl27 width=35 style='border-left:none;width:26pt'>ID</td>
正如你所看到上面的单元格使用样式类.x127。现在转到样式部分,找到.x127。
2
3 {mso - style - parent:style0;
4
5 font - weight: 700 ;
6
7 mso - number - format: " /@ " ;
8
9 text - align:center;
10
11 vertical - align:middle;
12
13 border:.5pt solid black;
14
15 white - space:normal;}
16
17
当你找到.x127样式之后,你会发现单元格格式定义为:mso-number-format:"/@"
带链接按钮与分页的GridView导出到Excel:
当你尝试导出包含带链接按钮与分页功能的GridView时,大概会看到下列错误:
你可以转到该页面的源代码中,将EnableEventValidation改为false,这样即可解决该问题。
现在,让我们来看看导出的文件:
和你看到的一样,LinkButton与DropDownList控件也和GridView一起导出了。虽然DropDownList也能正确的显示用户的选项,但是它在Excel中并不好看。所以,让我们看看如何来显示选中的文本并去除DropDownList。
我创建了一个简单的方法:DisableControls,它遍历了GridView中的控件,并用Literal控件代替LinkButton与DropDownList控件。
2 {
3
4LinkButton lb = new LinkButton();
5
6Literal l = new Literal();
7
8string name = String.Empty;
9
10for (int i = 0; i < gv.Controls.Count; i++)
11{
12
13if (gv.Controls[i].GetType() == typeof(LinkButton))
14{
15
16l.Text = (gv.Controls[i] as LinkButton).Text;
17
18gv.Controls.Remove(gv.Controls[i]);
19
20gv.Controls.AddAt(i, l);
21
22}
23else if (gv.Controls[i].GetType() == typeof(DropDownList))
24{
25l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text;
26
27gv.Controls.Remove(gv.Controls[i]);
28
29gv.Controls.AddAt(i, l);
30
31}
32
33if (gv.Controls[i].HasControls())
34{
35 DisableControls(gv.Controls[i]);
36}
37
38}
39
40}
41
42
43
44
这个方法很简单,用Literal控件来替换所有的LinkButton和DropDownList控件,并把它们的选择内容赋给Literal控件的Text属性。你必须在导出之前调用该方法。
2 {
3
4 DisableControls(gvUsers);
5
6 Response.ClearContent();
7
8 Response.AddHeader( " content-disposition " , " attachment; filename=MyExcelFile.xls " );
9
10 Response.ContentType = " application/excel " ;
11
12 StringWriter sw = new StringWriter();
13
14 HtmlTextWriter htw = new HtmlTextWriter(sw);
15
16 gvUsers.RenderControl(htw);
17
18 Response.Write(sw.ToString());
19
20 Response.End();
21
22 }
最后,当你导出GridView时,只会看到选中的文本内容。看一看下面的截图所显示的效果。
----------------------------------------------
PDF格式文件下载:Extensive_Study_of_GridView_Export_to_Excel.pdf
GridView To Excel相关推荐
- 在VS2005中 GridView导入Excel的两点小技巧-附源码
VS2005中 GridView导入Excel的导入需要注意的几点 最近带的项目遇到GridView导入Excel问题,总结出几点: 1.如果出现下面的错误提示可用重载VerifyRenderingI ...
- GridView导出Excel研究
Introduction: 将GridView中的数据导出为Excel是web应用中的常见功能.在不同的应用场景下有不同的导出技术.在本文中我将介绍一些导出的技术,希望对您有所帮助 GridView ...
- php yii2.0 读取excel,yii2.0使用excel Gridview读取excel内容
安装PHP Excel In Yiiframework 2.0 在 composer.json 和更新composer 去安装 phpoffice excel. "require" ...
- [转]GridView导出Excel总结
GridView导出Excel方法 一.引用如下命名空间 using System.IO; using System.Text; 二.详细代码 方法一:将代码直接写在页面 /// <summar ...
- Java导出Excel提示文件损坏_导出Gridview到Excel成功但文件已损坏?
我需要以编程方式创建一个包含3个工作表的Excel电子表格 . 对于Sheet1,我正在尝试导出一个Gridview ...及其所有格式...而不使用Http.Response这样做,因为该技术强制文 ...
- Gridview 导出excel,解决了只能导出当前页的问题
有两种方式导出数据,都可以实现Gridview导出excel,如果Gridview是分页的,解决了只能导出当前页的问题 第一种 例: 在A.aspx页面上 放入Gridview 在导出excel的bu ...
- gridview汇出EXCEL (ExportGridViewToExcel(dt, HttpContext.Current.Response);)
调用 ExportGridViewToExcel(dt, HttpContext.Current.Response); private void ExportGridViewToExcel(DataT ...
- GridView导出Excel的超好例子
其实网上有很多关于Excel的例子,但是不是很好,他们的代码没有很全,读的起来还很晦涩.经过这几天的摸索,终于可以完成我想要导出报表Excel的效果了.下面是我的效果图. 一.前台的页面图 GridV ...
- VS-c# web程序:gridview保存Excel文件遇到的问题
1.Gridview1必须放在具有runat=server的窗体标记内 解决方法:在程序相应位置加上以下代码中绿色部分代码即可. //按钮点击事件 protected void Button1_Cli ...
最新文章
- 我把SpringBoot项目从18.18M瘦身到0.18M,部署起来真省事!
- Nat. Commun. | 深度学习探索可编程RNA开关
- Linux 0.12内核与现代内核在内存管理上的区别
- Linux关闭防火墙、SELinux
- 如何在柱状图中点连线_练瑜伽,如何放松僵硬紧张的髂腰肌?
- 16进制数用空格分开 tcp_面试时,你是否被问到过TCP/IP协议?
- 作者:王雨华(1970-),男,中国科学院昆明植物研究所研究员、副所长
- C语言中短路求值问题
- 基于节点类的二叉树实现及部分操作函数
- Jquery插件的编写和使用
- mysql 5.7 刘,深度解析MySQL 5.7之中文全文检索
- 管理科学の学生自学CS的【计划】与【心得】
- C/C++中怎样获取日期和时间
- 计算机的硬盘和光驱的接口是什么类型的接口,连接硬盘和光驱是什么接口
- VelocityTracker 使用
- jenkins恢复删除的文件
- 极简生活牙膏,让你的口腔清新一整天!
- 从获评毕马威中国领先地产科技50强 看贝壳的长期主义
- 【Flink】学习笔记-20200302更新
- Linux ARM平台开发系列讲解(网络篇) 2.3 Marvell 88EA6321/88EA6320 Switch 设备树的配置分析
热门文章
- Docker下RabbitMQ四部曲之四:高可用实战
- 六月组队学习总结-图神经网络
- android n进入分屏代码分析_平板电脑全面进入多任务时代,Android N原生支持分屏显示...
- 【HTML5】渐变工具
- 无限火力跳跳机器人_《lol》无限火力攻略 机器人出装推荐
- android 文本框输入 默认文字居中,Android drawText 做到文字绝对居中(示例代码)
- 基于java电影评论网站系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- 今天在论坛上加了广告!!
- 景联文科技|两种常见的视频标注方法
- jQuery操作样式及属性样式