当前位置: 首页 > news >正文

GridView导出Excel研究

Introduction:

GridView中的数据导出为Excelweb应用中的常见功能。在不同的应用场景下有不同的导出技术。在本文中我将介绍一些导出的技术,希望对您有所帮助

GridView Export the Excel (Basic Code): 

.

首先看一个基础的应用。创建一个表格,见截图


 

然后将数据库中的数据绑定到GridView中的数据,代码如下:

private void BindData()

{

SqlConnection myConnection = newSqlConnection("Server=localhost;Database=School;Trusted_Connection=true");

SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Users", myConnection);

DataSet ds = new DataSet();

ad.Fill(ds);

gvUsers.DataSource = ds;

gvUsers.DataBind();

}


现在,GridView中已经绑定了数据,接下来的任务就是导出到Excel。下面是button事件中的代码

Response.ClearContent();

Response.AddHeader("content-disposition""attachment; filename=MyExcelFile.xls");

Response.ContentType = "application/excel";

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

gvUsers.RenderControl(htw);

Response.Write(sw.ToString());

Response.End();

并且还需要override一下VerifyRenderingInServerForm方法(这一点非常重要,否则在点击按钮后会报错,译者注)代码如下:

public override void VerifyRenderingInServerForm(Control control)

{

}

点击导出按钮后会弹出对话框,询问您打开或保存。选择打开文件,导出到Excel的结果如下图:


Exporting GridView to Excel With Style:


您是否注意到了以上代码存在一些的问题?是的,ID列开头的0都被截去了。如果你的ID000345,导出后就编程了345。这个问题可以通过把css添加到输出流中来解决。为了使ID列正确显示,您需要将其储存为文本格式。Excel中的文本格式表示为"mso-number-format:"\@"

protected void Btn_ExportClick(object sender, EventArgs e)

{

string style = @"<style> .text { mso-number-format:\@; } </script> ";

Response.ClearContent();

Response.AddHeader("content-disposition""attachment; filename=MyExcelFile.xls");

Response.ContentType = "application/excel";

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

gvUsers.RenderControl(htw);

// Style is added dynamically

Response.Write(style);

Response.Write(sw.ToString());

Response.End();

}

public override void VerifyRenderingInServerForm(Control control)

{

}

 

在上面的代码中,我通过 ”style” 变量来控制 GridView 列的样式。并通过 Respnose.Write 方法将其添加到输出流中。最后把样式添加到 ID 列。这一步需要在 RowDataBound 事件中完成

protected void gvUsers_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.DataRow)

{

e.Row.Cells[1].Attributes.Add("class""text");

}

}

 

修改的结果如下:



Exporting GridView With LinkButtons and Paging: 

如果要导出的GridView中包含LinkButton或者分页(出现分页码时,译者注则将出现错误:


通过修改页文件可以修正这个问题:EnableEventValidation = "false".

<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true"CodeFile="Default.aspx.cs" Inherits="_Default" %>

看一下导出的文件


 

在导出的文件中可以看见linkbuttondropdownlist控件,虽然dropdownlist控件显示的数据的确是用户所选的项,但怎么看也不像是一个导出文件(我倒是觉的挺cool的:)译者注),现在应如何移除dropdownlist并显示选择的文字呢?

 


我写了一个 DisableControls 函数,用使循环的方法将 linkbutton dropdownlist 替换成 literal 控件

private void DisableControls(Control gv)

{

LinkButton lb = new LinkButton();

Literal l = new Literal();

string name = String.Empty;

for (int i = 0; i < gv.Controls.Count; i++)

{

if (gv.Controls[i].GetType() == typeof(LinkButton))

{

l.Text = (gv.Controls[i] as LinkButton).Text;

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

else if (gv.Controls[i].GetType() == typeof(DropDownList))

{

l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text;

gv.Controls.Remove(gv.Controls[i]);

gv.Controls.AddAt(i, l);

}

 

if (gv.Controls[i].HasControls())

{

DisableControls(gv.Controls[i]);

}

}

}

方法非常简单,只需将linkbutondropdownlist替换成literal控件,并将选择项赋值给literal控件的文本属性。该方法需要在导出前调用

protected void Btn_ExportExcelPaging(object sender, EventArgs e)

{

DisableControls(gvUsers);

Response.ClearContent();

Response.AddHeader("content-disposition""attachment; filename=MyExcelFile.xls");

Response.ContentType = "application/excel";

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

gvUsers.RenderControl(htw);

Response.Write(sw.ToString());

Response.End();

}

 

现在的Excel中就只剩下选中文本了

转载于:https://www.cnblogs.com/taizhouxiaoba/archive/2010/09/28/1837309.html

相关文章:

  • img图片没找到onerror事件 Stack overflow at line: 0
  • Delphi的程序单元
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • h.264 SODB RBSP EBSP的区别
  • 安装打印机失败.错误:提示 另一个程序正在使用此文件,进程无法访问
  • Jquery中的$(document).ready(function(){});的浏览器不兼容性
  • 左偏树详解 ( 转载 )
  • 转:Discuz!NT前台模型架构(MVC)
  • [VSX.001]深入VS SDK
  • 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
  • 一个很简单的Win32汇编程序
  • Silverlight如何跨域访问没有策略文件的服务
  • Linux内核代码学习笔记(2.6.21.7 ARM) -- 内核启动函数start_kernel
  • 将DataTable转换成类的方法
  • NOKIA C5-00怎么连接电脑??
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 07.Android之多媒体问题
  • Android交互
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ECMAScript入门(七)--Module语法
  • Java到底能干嘛?
  • Java精华积累:初学者都应该搞懂的问题
  • node和express搭建代理服务器(源码)
  • PAT A1092
  • python学习笔记 - ThreadLocal
  • Rancher如何对接Ceph-RBD块存储
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Theano - 导数
  • vue-router的history模式发布配置
  • XML已死 ?
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 判断客户端类型,Android,iOS,PC
  • 前端技术周刊 2019-02-11 Serverless
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Matlab)使用竞争神经网络实现数据聚类
  • (WSI分类)WSI分类文献小综述 2024
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)u-boot-nand.bin的下载
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(一)
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net 程序发生了一个不可捕获的异常
  • .NET 解决重复提交问题
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net中调用windows performance记录性能信息
  • .net专家(高海东的专栏)
  • .net专家(张羿专栏)
  • :not(:first-child)和:not(:last-child)的用法
  • @Data注解的作用