将GridView导入到Excel和word(完全可实现)

简介:

1.将GridView导入到Excel和word

需要注意两个地方:

1.EnableEventValidation="false" 必须加

2.下面这个事件必须加

public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}

在我的资源里有相应的原代码下载

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="excel.aspx.cs" EnableEventValidation="false" Inherits="将GridView导出到Excel_excel" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
< head runat="server">
<title>将Gridview导出到Excel,Word</title>
< /head>
< body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
CellPadding="4" DataKeyNames="stuid" DataSourceID="SqlDataSource1" ForeColor="#333333"
GridLines="None">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="stuid" HeaderText="编号" InsertVisible="False" ReadOnly="True"
SortExpression="stuid" />
<asp:BoundField DataField="stuname" HeaderText="姓名" SortExpression="stuname" />
<asp:CheckBoxField DataField="stusex" HeaderText="性别" SortExpression="stusex" />
<asp:BoundField DataField="stuaddress" HeaderText="地址" SortExpression="stuaddress" />
<asp:BoundField DataField="stuage" HeaderText="年龄" SortExpression="stuage" />
<asp:BoundField DataField="stutuition" HeaderText="学费" SortExpression="stutuition" />
<asp:BoundField DataField="stuaveragescore" HeaderText="成绩" SortExpression="stuaveragescore" />
</Columns>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>

</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myTestGridViewConnectionString %>"
SelectCommand="SELECT * FROM [stu]"></asp:SqlDataSource>
<asp:Button ID="Button1" runat="server" Text="导出到Excel" OnClick="Button1_Click" />
<br />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="导出到Word" Width="108px" />
</form>
< /body>
< /html>

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.IO;

public partial class 将GridView导出到Excel_excel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

public void ExportToExcel(string FileType, string FileName)
{
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();

}
//导出到Excel
protected void Button1_Click(object sender, EventArgs e)
{
ExportToExcel("application/ms-excel","学生信息.xls");

}

//导出到Word
protected void Button2_Click(object sender, EventArgs e)
{
ExportToExcel("application/ms-excel", "学生信息.doc");
//ExportToExcel("application/ms-word", "学生信息.doc");//都可以

}

//这个事件必须加
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}

}
当然上面的这些东东也是我从CSDN上面学来的,有一篇是看的青青月儿的,还有一篇,忘了是谁的啦,反正挺感谢的。


2.重载VerifyRenderingInServerForm

今天在做一个AjaxPro的应用时,VerifyRenderingInServerForm给我带来了麻烦,在网上找了找,发现大多数人的解决方法就是重载VerifyRenderingInServerForm,然后让它什么也不做。

public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm (control);
}


这样做的确解决了我遇到的问题,但我看帮助对这个方法的说明,强调没有必要不要重写。

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

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

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

除非要创建替换页框架,否则请不要重写此方法。


于是我跟踪了一下,发现页面的每个服务器端控件都会执行这个方法,结合我自己的实际情况,做了点小修改

public override void VerifyRenderingInServerForm(Control control)
{
if (!control.GetType().Name.Equals("DataGridLinkButton"))
{
base.VerifyRenderingInServerForm (control);
}

}


因为我需要在AjaxMethod中获得一个控件的HTML输出到画面上,而这个控件是我new出来的,显然不可能在<form runat=server> 标记内,于是我就加了个判断,虽然还是没有做到十全十美(就是如果画面上本来就有的DataGridLinkButton也不做验证了。)但感觉比起直接把base方法调用注释掉还是合情合理些。

木野狐对这个问题也有篇文章描述了下。


3.Page.VerifyRenderingInServerForm 返回什么,怎样结合他确定是否将自定义控件写到页面上?

saucer(思归)回复于 2004-12-09 09:09:38

try to override AddAttributesToRender, for example, this is how it is done with LinkButton if you use Reflector to see the implementation:

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
if (this.Page != null)
{
this.Page.VerifyRenderingInServerForm(this);
}
base.AddAttributesToRender(writer);
....
}




本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2007/09/14/892977.html,如需转载请自行联系原作者

   

相关文章
|
1月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
117 5
|
3月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
5月前
|
Web App开发 前端开发 安全
2024年新一代WebOffice内嵌网页组件,Web网页在线编辑Word/Excel/PPT
WebOffice控件面临兼容性、用户体验和维护难题。随着浏览器更新,依赖插件的技术不再适用,如Chrome不再支持NPAPI和PPAPI。产品普遍不支持多版本Office并存,定制能力弱,升级复杂。猿大师办公助手提供了解决方案,它兼容多种浏览器,包括最新版和国产浏览器,不依赖插件,支持文档对比,具有丰富的功能和接口,兼容多种Office版本,允许源码级定制,提供终身技术支持,并实现静默在线升级。适用于多种行业和操作系统。
309 12
|
4月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
272 0
|
4月前
|
关系型数据库 MySQL Windows
MySQL数据导入:MySQL 导入 Excel 文件.md
MySQL数据导入:MySQL 导入 Excel 文件.md
|
5月前
|
存储 关系型数据库 MySQL
Excel 导入 sql3
【7月更文挑战第18天】
47 2
|
4月前
|
前端开发 easyexcel
SpringBoot+Vue3实现Excel导入
SpringBoot+Vue3实现Excel导入
126 0
VBA如何用Excel数据批量生成Word文档
VBA|用Excel数据批量生成并修改用模板创建的Word文档
|
5月前
|
前端开发 JavaScript PHP
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
62 0
|
5月前
|
JSON JavaScript 数据格式
vue 电子表格Excel的上传导入、导出下载、读取本地Excel、json转Excel
vue 电子表格Excel的上传导入、导出下载、读取本地Excel、json转Excel
365 0