GridView/DataGrid导出成Excel文件的万能解决方法

C# 导出 Excel 的各种方法总结 第一种:使用 Microsoft.Office.Interop.Excel.dll 首先需要安装 office 的 excel,然后再找到Microsoft.Office.Interop.Excel.dll 组件,添加到引用。 View Code View Code 第一种方法性能实在是不敢恭维,而且局限性太多。首先必须要安装 office(如果计算机上面没有的话),而且导出时需要指定文件保存的路径。也可以输出到浏览器下载,当然前提是已经保存写入数据。 第二种:使用Aspose.... 阅读详情

 [原创] GridView[DataGrid]导出成Excel文件的万能解决方法

 GridView[DataGrid]导出成Excel文件在Dot.Net使用群中是个很大的问题了,
随便一搜,都会搜出一大堆的。而好多实现要依赖于Office软件自带的ActiveX,
基于ActiveX的实现,必然会出现"Dll Hell"的问题,所以并不可取。
 最好的方法是保持原来Web页面原样,而且不依赖于Office的ActiveX,这个方法
网上流传很广了,不过我在使用的过程中发现有一些问题,结合自己的解决和未解决的问题,
写如下一篇文章,以期的到抛砖引玉的效果^-^
 
 这个就是网上流传的代码了,我做了适当的修改:
 

    /*
               网事如风
               ExcelGridView :需要导出的GridView
               FileName :保存出来的Excel文件名,需要加文件名后缀
    
*/

    
public   void  GridViewToExcel(GridView ExcelGridView,  string  FileName)
    
{
            //处理分页:如果分页为True,则设置为False
        
bool OldAllowPaging = ExcelGridView.AllowPaging; 
        if ( OldAllowPaging )
            ExcelGridView.AllowPaging 
= !OldAllowPaging;
        // 重新绑定.
        ExcelGridView.DataBind();


        
//有时用 gb2312 不能正常显示中文,要用 utf-8
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
       
//必要,做成下载文件
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName); 

        
//如果要直接在浏览器中打开,把上行注释掉,换成下面这行
        
//Response.ContentType = "application/vnd.ms-excel";
           // 从Content-Type header中去除charset设置    
        Response.Charset = "";          

        
//关闭 ViewState
        this.EnableViewState = false;
        System.IO.StringWriter tw 
= new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw 
= new HtmlTextWriter(tw);
            //获取control的HTML
        ExcelGridView.RenderControl(hw);
            //把HTML写回浏览器 
        Response.Write(tw.ToString());   
        Response.End();
        ExcelGridView.AllowPaging 
= OldAllowPaging;
    }

如上代码如果处理一般的GridView导出应该是没有问题的,但是如果GridView的AutoGenerateDeleteButton,AutoGenerateEditButton,
AutoGenerateSelectButton有的设置为True了,或者GridView中有HyperLinkField类型的字段,那么就会抛出形如
“类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常!

关于生成这个错误的原因请见:
 http://www.cnblogs.com/rchen/archive/2005/03/22/123592.html

那么他的解决方案是:对WebForm窗体的VerifyRenderingInServerForm方法进行Override!
代码如下:

   

// 必须要
     public   override   void  VerifyRenderingInServerForm(Control control)
    
{
        
//OverRide 为了使导出成Excel可行!
    }


再附上微软的MSDN的帮助:
===========================================
Page.VerifyRenderingInServerForm 方法
确认在运行时为指定的 ASP.NET 服务器控件呈现 HTMLForm 控件。

 

[C#]
public   virtual   void  VerifyRenderingInServerForm(Control control);

参数control
ASP.NET 服务器控件,它必须位于 HTMLForm 控件中。
异常
    异常类型
    条件
HttpException 指定的服务器控件在运行时不包含在 HTMLForm 服务器控件的开始和结束标记之间。

备注
如果该页当前不处于页处理中的呈现阶段,且位于 <form runat=server> 标记内,则该方法将引发异常。需要位于服务器窗体内的控件可以
在呈现期间调用该方法,以便在它们被放置到外面时显示明确的错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法
的重写中调用该方法。呈现服务器窗体元素的方式不同的页可以重写该方法以在不同的条件下引发异常。

如果回送或使用客户端脚本的服务器控件没有包含在 HTMLForm 服务器控件 (<form runat="server">) 中,它们将无法正常工作。这些控件
可以在呈现时调用该方法,以在它们没有包含在 HTMLForm 控件中时提供明确的错误信息。

开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference
或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。

除非要创建替换页框架,否则请不要重写此方法。
===========================================
这个就满足上面的条件导出成Excel文件了.
不过这个方法并没有解决GridView内嵌控件比如CheckBox的导出,我所遇到的是在GridView的第一行是供选择的CheckBox,
所以我加了一句

ExcelGridView.Columns[ 0 ]. Visible  =   false ;    // 去掉第一列CheckBox

解决了这个问题,不过办法很笨,所以算是万能之中的瑕疵吧,等待大家给出解决方案^-^

FPGA AXI DDR3读写时序调试与FIFO缓存实战解析 本文深入解析FPGA中AXI协议与DDR3的读写时序调试,重点探讨FIFO缓存在数据流控制中的关键作用。通过实战案例详细讲解突发传输中的地址对齐、数据分片等常见问题,并提供状态机设计、仿真波形分析和性能优化技巧,帮助开发者高效解决高速数据存储场景下的时序同步与数据一致性问题。 阅读详情

相关推荐

告别Overleaf!本地LaTeX环境配置:VSCode+TeXLive完全指南(Windows/Mac双平台)

本文详细介绍了如何在Windows和Mac平台上配置本地LaTeX环境,使用VSCode和TeXLive打造高效的专业写作工作流。从TeXLive安装到VSCode插件配置,再到高级技巧与性能优化,帮助用户摆脱Overleaf限制,实现更快速、更私密的学术写作体验。

3c4x5z6v7b的博客 953

C# 导出 Excel 方法

这种方法需要指定一个已经存在的 Excel 文件作为写入数据的模板,不然的话就得使用流创建一个新的 Excel 文件,但是这样是没法识别的,那就需要用到 Microsoft.Office.Interop.Excel.dll 里面的 Microsoft.Office.Interop.Excel.Workbook.SaveCopyAs() 方法另存为一下,这样性能也就更差了。使用操作命令创建的表都是在最后面的,前面的也没法删除(我是没有找到方法),当然也可以不再创建,直接写入数据也可以。

weixin_70862058的博客 6287

基于IWRL6432AOP的低功耗毫米波雷达设计:从硬件选型到算法调优实战

毫米波雷达作为一种非接触式物理层感知技术,通过发射和接收高频电磁波实现对目标距离、速度及微动特征的探测。其核心原理在于分析反射波的频率和相位变化,从而在复杂环境(如黑暗、雨雾)中实现稳定感知,且不涉及光学成像,天然具备隐私保护优势。在工程实践中,低功耗与小型化是技术落地的关键挑战,这直接关系到其在电池供电的物联网设备中的可行性。天线封装技术通过将天线集成于芯片内部,极大简化了射频前端设计,降低了硬件成本和开发门槛。本文以TI的IWRL6432AOP芯片为例,深入剖析其在智能恒温器等场景中实现精准人员存在检测

weixin_29189003的博客 282

C# 导出excel文件的6种办法

原博客链接:https://blog.csdn.net/huoliya12/article/details/90645036 为防止遗忘,所以进行摘录,原文介绍有8种,感兴趣的查看原文。 1、使用Microsoft.Office.Interop.Excel.dll 缺点:性能实在是不敢恭维,而且局限性太多。首先必须要安装 office(如果计算机上面没有的话),而且导出时需要指定文件保存的路径。也可以输出到浏览器下载,当然前提是已经保存写入数据。代码也记录一下: public void Export

qq_19749779的博客 6700

GDI文字绘制和windows下opengl文字绘制小结

GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。 font对象的创建可以由createfont()、createfontIndirect()来实现。 HFONT CreateFont( int nHeight, // height of font int nWidth, // average

T_W_S的专栏 5324

激光可燃气体传感器:核心技术环节分析

激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字)

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1047

C#、javaScript 导出Excel的几种方法!

第一种:将页面的Table导出Excel(javaScript) //导出Excel function excelPrint() { var date = new Date(); var filename = documen

huangguiming的专栏 1756

西门子S7-200 SMART PLC控制伺服电机

以下是使用西门子S7-200 SMART PLC控制伺服电机的详细程序框架和配置说明,涵盖硬件接线、PLC配置和基本运动控制逻辑。具体实现需根据伺服电机型号(如松下、三菱、台达等)调整参数。通过以上步骤,可实现伺服电机的基础位置控制。实际应用需根据设备机械参数和伺服驱动器手册调整细节。建议在调试时逐步测试脉冲输出和方向信号是否正常。

CHUXUEZHE8210的博客 6432

巧用DevExpress GridView导入导出Excel

1、Excel数据导入到数据库中: 在页面放置1个按钮控件(Button1)和1个文件上传控件(FileUpload1)»更多DevExpress开发资源与帮助文档     protected void Page_Load(object sender, EventArgs e)     {         GridView1.Visible = false;     }     pro

bighead1026的专栏 5094

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

DRM全解析 —— encoder详解(3)

DRM全解析 —— encoder详解(3)

phmatthaus的专栏 493

WPF DataGrid 导出Excel

#region Excel导出 private void btnExportExcel_Click(object sender, RoutedEventArgs e) { Export(this.dgvList, "XX信息查询列表"); } public void Export(DataGrid dataGrid, string excelTitle) { System.Dat...

cuoban的学习空间 1017

攻克反光难题!YOLOv9工业缺陷检测实战:高反光件、微小划痕精准识别(附抗反光代码+产线数据)

文章摘要:本文针对不锈钢、铝合金等高反光工业件的缺陷检测难题,提出了一套“硬件抗反光+YOLOv9小目标增强”的解决方案。通过分析反光干扰(镜面/漫反射)和微小划痕(0.1mm级)两大核心问题,详细介绍了500万像素工业相机+偏振光源的硬件配置方案,以及基于偏振图像融合和超分辨率放大的预处理方法。最终实现误检率1.2%、微小划痕检出率99.3%的工业级检测效果,并提供了可落地的代码实现和车间实测数据。(148字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1043

DevExpress GridView导入导出Excel

1、Excel数据导入到数据库中:在页面放置1个按钮控件(Button1)和1个文件上传控件(FileUpload1) protected void Page_Load(object sender, EventArgs e) { GridView1.Visible = false; } protected void Button1_Cl

ltoper的专栏 7245

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

wpf datagrid数据 导出到excel

public static void ExportToExcel(DataGrid dataGridView1, string sheetName) { SaveFileDialog fileDialog = new SaveFileDialog(); fileDialog.Filter = “Excel(97-2003)|*.xls”; if (fileDialog.ShowDialog() == false) { return; } //不允许dataGridView显示添加行,负责导出时会报最后一行未

蜂巢 689

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ASP.NET中解决导出到Excel乱码的方法

在导出DataGrid/GridView数据行到Excel的时候,如果文件名为中文的话,就会出现乱码。解决方法,现记载如下: private void ExportToFile(string fileType, string fileName) { Response.Charset = "GB2312"; Response.Conte

1037

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用gridview显示来自excel表格里的数据

在asp.net 2.0中,如何用gridview显示来自建立好的EXCEL文件的内容呢,其实是很简单的,下面给出简单代码片断protected void Page_Load(object sender, EventArgs e){  OleDbConnection DBConnection = new     OleDbConnection("Provider=Microsoft.Jet.O

水上漂的专栏 2989

用C#生成Excel文件的方法和Excel.dll组件生成的方法

 NET Framework1.0和1.1 都没有实现OleContainer组件。查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer。这绝对是一个超重的实现,不过,最目前情况下,却是一个最省事的方法。本文就简单的说明一下,如何使用IEBrowser控件来嵌入Excel表格。    1. 首先,需要在工具栏中导入“Microsoft WEB 浏览器”。可以

zwsxyy的专栏 7774

ASP.NET关于GridView导出Excel

/// /// 将DataTable数据导出到EXCEL,调用该方法后自动返回可下载的文件流 /// /// 要导出的数据源 public static void DataTable1Excel(System.Data.DataTable dt

爱我所爱,无处不在 1477

强大的Excel文件的导入导出类

using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.OleDb; using Microsoft.Office.Interop.Excel; using System.Re...

dianhua2199的博客 138

DataGrid與GridView導出EXCEL

1.DataGrid導出excel protected void imgImport_Click(object sender, ImageClickEventArgs e)    {        if (dgShow.Items.Count > 0)        {            DataGrid gv = new DataGrid();           

wubing1111的专栏 426

WPF将DataGrid内容导出到Excel

WPF将DataGrid内容导出到Excel最近在维护一个项目程序的时候需要新添加一些需求,其中一个需求就是把WPF中的datagird中的内容导出为Excel。查了很多网上的资料,最后结合将DataGridView导出到Excel的方法做了一些调整之后实现了功能需求。 !首先在VS里引用,前提电脑里必须要有Excel否则不能引用 我是通过点击button控件进行保存的。直接贴代

sinat_32836157的博客 3009

DataGrid中的数据导出到EXCEL

public static void DataTable2Excel(System.Data.DataTable dtData, String FileName)//dt导出到EXCEL  {   System.Web.UI.WebControls.GridView dg

HJ850126的专栏 2683

ASP.NET(C#) DataSet数据导出到Excel

今天给客户做了个功能需要把网格数据(Gridview)导出成Excel,所以我去网上找了个代码 private void Export(string FileType, string FileName) ...{ try ...{ Response.Charset = "

水煮鱼的博客 3414
上一篇: DotNet探密 之: CodeDOM [代码文档对象模型]
下一篇: 一个常见Sql问题的解决
SysBug
博客等级 码龄22年 3粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值