在VS2005中 GridView导入Excel的两点小技巧-附源码

简介:
VS2005中 GridView导入Excel的导入需要注意的几点

最近带的项目遇到GridView导入Excel问题,总结出几点:

1、如果出现下面的错误提示可用重载VerifyRenderingInServerForm方法解决。
错误提示:
类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内

在后台文件中重载VerifyRenderingInServerForm方法,如:
public override void VerifyRenderingInServerForm(Control control)
{
     //base.VerifyRenderingInServerForm(control);
}

2、如果设置为 GetEncoding("GB2312"),导出的文件将会出现乱码。

可用Response.ContentEncoding = System.Text.Encoding.UTF7;
或者Encoding.UTF8等来解决,不过导入格式和字体上个人感觉UTF7比UTF8效果好些;
因人而异了:)

源码下载地址:http://bbs.52happy.net/read.php?tid=219811

相关代码如下:

Web.config配置:
None.gif <? xml version="1.0" ?>
None.gif
<!--  
None.gif    注意: 除了手动编辑此文件以外,您还可以使用 
None.gif    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
None.gif     “网站”->“Asp.Net 配置”选项。
None.gif    设置和注释的完整列表在 
None.gif    machine.config.comments 中,该文件通常位于 
None.gif    \Windows\Microsoft.Net\Framework\v2.x\Config 中
None.gif
-->
None.gif
< configuration >
None.gif    
< appSettings >
None.gif        
<!-- 数据库连接串 -->
None.gif        
< add  key ="ConnectionString"  value ="data source=.;initial catalog=Northwind;user id=sa;password=sa;persist security info=true;packet size=4096" />
None.gif    
</ appSettings >
None.gif    
< connectionStrings />
None.gif    
< system .web >
None.gif        
<!--  
None.gif            设置 compilation debug="true" 将调试符号插入
None.gif            已编译的页面中。但由于这会 
None.gif            影响性能,因此只在开发过程中将此值 
None.gif            设置为 true。
None.gif        
-->
None.gif        
< compilation  debug ="true" />
None.gif        
<!--
None.gif            通过 <authentication> 节可以配置 ASP.NET 使用的 
None.gif            安全身份验证模式,
None.gif            以标识传入的用户。 
None.gif        
-->
None.gif        
< authentication  mode ="Windows" />
None.gif        
<!--
None.gif            如果在执行请求的过程中出现未处理的错误,
None.gif            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
None.gif            开发人员通过该节可以配置
None.gif            要显示的 html 错误页
None.gif            以代替错误堆栈跟踪。
None.gif
None.gif        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
None.gif            <error statusCode="403" redirect="NoAccess.htm" />
None.gif            <error statusCode="404" redirect="FileNotFound.htm" />
None.gif        </customErrors>
None.gif        
-->
None.gif    
</ system.web >
None.gif
</ configuration >
None.gif
ASPX页面代码:

None.gif < %@ Page  Language ="C#"  AutoEventWireup ="true"   CodeFile ="Default.aspx.cs"  Inherits ="_Default"  % >
None.gif
None.gif
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
None.gif
None.gif
< html  xmlns ="http://www.w3.org/1999/xhtml"   >
None.gif
< head  runat ="server" >
None.gif    
< title > 无标题页 </ title >
None.gif
</ head >
None.gif
< body >
None.gif    
< form  id ="form1"  runat ="server" >
None.gif    
< div >
None.gif        
&nbsp;
None.gif        
< asp:GridView  ID ="GridView1"  runat ="server"  AllowPaging ="true"  OnPageIndexChanging ="Paging" >
None.gif        
</ asp:GridView >
None.gif    
None.gif    
</ div >
None.gif        
< asp:Button  ID ="Button1"  runat ="server"  OnClick ="Button1_Click"  Text ="导出到Excel"   />
None.gif    
</ form >
None.gif
None.gif
</ body >
None.gif
</ html >
None.gif

实例代码:
ExpandedBlockStart.gif /*
InBlock.gif *    // by XiaoYin [10/22/2006]
ExpandedBlockEnd.gif 
*/

None.gif
using  System;
None.gif
using  System.Data;
None.gif
using  System.Configuration;
None.gif
using  System.Web;
None.gif
using  System.Web.Security;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
using  System.Web.UI.WebControls.WebParts;
None.gif
using  System.Web.UI.HtmlControls;
None.gif
using  System.Data.SqlClient;
None.gif
using  System.Xml;
None.gif
None.gif
public  partial  class  _Default : System.Web.UI.Page 
ExpandedBlockStart.gif
{
InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 链接字符串
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public string ConnectString
ExpandedSubBlockStart.gif    
{
InBlock.gif        
get
ExpandedSubBlockStart.gif        
{
InBlock.gif            
return ConfigurationManager.AppSettings["ConnectionString"];
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 重载VerifyRenderingInServerForm方法
InBlock.gif    
/// 确认在运行时为指定的 ASP.NET 服务器控件呈现 HtmlForm 控件。
InBlock.gif    
/// </summary>
ExpandedSubBlockEnd.gif    
/// <param name="control">ASP.NET 服务器控件,它必须位于 HtmlForm 控件中</param>

InBlock.gif    public override void VerifyRenderingInServerForm(Control control)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
//base.VerifyRenderingInServerForm(control);
ExpandedSubBlockEnd.gif
    }

InBlock.gif
InBlock.gif
InBlock.gif    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
if (!Page.IsPostBack)
ExpandedSubBlockStart.gif        
{
InBlock.gif            BindData();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 绑定数据
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public void BindData()
ExpandedSubBlockStart.gif    
{
InBlock.gif        
// 查询
InBlock.gif
        string query = "SELECT * FROM Categories";
InBlock.gif        SqlConnection myConnection 
= new SqlConnection(ConnectString);
InBlock.gif        SqlDataAdapter ad 
= new SqlDataAdapter(query, myConnection);
InBlock.gif        DataSet ds 
= new DataSet();
InBlock.gif        ad.Fill(ds, 
"Categories");
InBlock.gif        GridView1.DataSource 
= ds;
InBlock.gif        GridView1.DataBind();
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 内存分页
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="sender"></param>
ExpandedSubBlockEnd.gif    
/// <param name="e"></param>

InBlock.gif    protected void Paging(object sender, GridViewPageEventArgs e)
ExpandedSubBlockStart.gif    
{
InBlock.gif        GridView1.PageIndex 
= e.NewPageIndex;
InBlock.gif        BindData();
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
protected void Button1_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gif    
{
InBlock.gif        Response.Clear();
InBlock.gif        Response.Buffer 
= true;
InBlock.gif        Response.Charset 
= "GB2312";
InBlock.gif        Response.AppendHeader(
"Content-Disposition""attachment;filename=FileName.xls");
InBlock.gif        
//gaoyang [10/21/2006] 经测试如果设置为 GetEncoding("GB2312"),导出的文件将会出现乱码。
InBlock.gif
        Response.ContentEncoding = System.Text.Encoding.UTF7;
InBlock.gif
InBlock.gif        
//设置输出文件类型为excel文件。 
InBlock.gif
        Response.ContentType = "application/ms-excel";
InBlock.gif        System.IO.StringWriter oStringWriter 
= new System.IO.StringWriter();
InBlock.gif        System.Web.UI.HtmlTextWriter oHtmlTextWriter 
= new System.Web.UI.HtmlTextWriter(oStringWriter);
InBlock.gif        
this.GridView1.RenderControl(oHtmlTextWriter);
InBlock.gif        Response.Output.Write(oStringWriter.ToString());
InBlock.gif        Response.Flush();
InBlock.gif        Response.End();
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

 

本文转自高阳 51CTO博客,原文链接:http://blog.51cto.com/xiaoyinnet/196546 ,如需转载请自行联系原作者

相关文章
|
23天前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
51 0
|
4月前
|
存储 JSON 关系型数据库
Pandas载入txt、csv、Excel、JSON、数据库文件讲解及实战(超详细 附源码)
Pandas载入txt、csv、Excel、JSON、数据库文件讲解及实战(超详细 附源码)
65 0
VS2005(excel2007)利用Automation(OLD Automation)方法。将Excel当成组件服务器的编译错误 我的系统盘和office都装在d盘。 自动生成的import有问题
VS2005(excel2007)利用Automation(OLD Automation)方法。将Excel当成组件服务器的编译错误 我的系统盘和office都装在d盘。 自动生成的import有问题
|
6天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
20 0
|
1月前
|
存储 数据处理 数据格式
Python中导入Excel数据:全面解析与实践
Python中导入Excel数据:全面解析与实践
42 0
|
1月前
|
存储 关系型数据库 MySQL
Python导入Excel数据到MySQL数据库
Python导入Excel数据到MySQL数据库
93 0
|
1月前
|
Java easyexcel 应用服务中间件
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
199 0
|
2月前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
101 0
|
6月前
|
Java Maven
【Java用法】使用EasyPoi导入与导出Excel文档的解决方案
【Java用法】使用EasyPoi导入与导出Excel文档的解决方案
147 0
|
3月前
|
easyexcel 数据库
为获取导入百分比,使用easyexcel获取导入excel表总行数
为获取导入百分比,使用easyexcel获取导入excel表总行数
85 0