`

GridView导出到Excel或Word文件

阅读更多

前台页面:

 

   

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

<!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>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="gvPersonList" runat="server" AutoGenerateColumns="False" 
            AllowPaging="True" onpageindexchanging="gvPersonList_PageIndexChanging">
    <Columns>
    <asp:TemplateField HeaderText="编号">
    <ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="Name" HeaderText="姓名" />
    <asp:TemplateField HeaderText="性别">
    <ItemTemplate>
    <asp:Label ID="Label2" runat="server" 
    Text='<%# Eval("Sex").ToString().ToLower()=="true"?"男":"女" %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
     <asp:TemplateField HeaderText="婚否">
     <ItemTemplate>
     <asp:Label ID="Label3" runat="server" 
     Text='<%#Boolean.Parse(Eval("Married").ToString())==true?"是":"否" %>'></asp:Label>
     </ItemTemplate>
     </asp:TemplateField>
     </Columns>
     </asp:GridView>
     <asp:Button ID="btnToExcel" runat="server" Text="导出Excel" 
      onclick="btnToExcel_Click" />
     <asp:Button ID="btnToWord" runat="server" Text="导出Word" 
      onclick="btnToWord_Click" />
    </div>
    </form>
</body>
</html>

 

 

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

public partial class Default4 : System.Web.UI.Page
{

    private string firstName = "赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华";
    private String lastName = "猛勇刚强豹彪雁燕蓉菲";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
        }
    }

    //绑定表格GridView数据
    private void BindGridView()
    {
        gvPersonList.DataSource = CreateDataTable();
        gvPersonList.DataBind();
    }

    //手动生成DataTable
    private DataTable CreateDataTable()
    {
        DataTable data = new DataTable();
        //ID列
        DataColumn dcid = new DataColumn("id", typeof(Int32));
        //设置ID列自动递增
        dcid.AutoIncrement = true;
        //设置ID列初始值为1
        dcid.AutoIncrementSeed = 1;
        //设置ID列递增步长为1
        dcid.AutoIncrementStep = 1;
        //将ID列添加到DataTable中
        data.Columns.Add(dcid);
        data.Columns.Add(new DataColumn("Name", typeof(String)));
        data.Columns.Add(new DataColumn("Age", typeof(int)));
        data.Columns.Add(new DataColumn("Sex", typeof(bool)));
        data.Columns.Add(new DataColumn("Married", typeof(bool)));
        DataRow dataRow = null;
        Random random = new Random();
        for (int i = 0; i < 20; i++)
        {
            dataRow = data.NewRow();
            //随机生成姓名
            dataRow["Name"] = firstName.Substring(random.Next(firstName.Length), 1)
            + lastName.Substring(random.Next(lastName.Length), 1);
            //随机生成年龄
            int age = random.Next(20, 100);
            dataRow["Age"] = age;
            //随机生成性别
            bool sex = (random.Next(100) % 2 == 0) ? true : false;
            dataRow["Sex"] = sex;
            if (sex == true && age >= 22 || sex == false && age >= 20)
            {
                dataRow["Married"] = (random.Next(500) % 2 == 0) ? true : false;
            }
            else
            {
                dataRow["Married"] = false;
            }

            data.Rows.Add(dataRow);
        }

        return data;
    }

    /// <summary>
    /// 导出数据函数
    /// </summary>
    /// <param name="FileType">导出文件MIME类型</param>
    /// <param name="FileName">导出文件的名称</param>
    private void Exprot(String FileType, String FileName)
    {
        Response.Clear();
        Response.BufferOutput = true;
        //设定输出字符集
        Response.Charset = "GB2312";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.AppendHeader("Content-Disposition", "attachment;filename="
        + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));
        //设置输出流HttpMiME类型(导出文件格式)
        Response.ContentType = FileType;
        //关闭ViewState
        Page.EnableViewState = false;
        System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true);
        System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo);
        HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);
        gvPersonList.RenderControl(textWriter);
        //把HTML写回游览器
        Response.Write(stringWriter.ToString());
        Response.End();
        Response.Flush();
    }

    //导出Excel
    protected void btnToExcel_Click(object sender, EventArgs e)
    {
        //Response.Clear();
        //Response.BufferOutput = true;
        ////设定输出的字符集
        //Response.Charset = "utf-8";
        ////假定导出的文件名为FileName.xls
        //Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
        //Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
        ////设置导出文件的格式
        //Response.ContentType = "application/ms-excel";
        ////关闭ViewState
        //EnableViewState = false;
        //System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true);
        //System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo);
        //System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
        //gvPersonList.RenderControl(textWriter);
        ////把HTML写回浏览器
        //Response.Write(stringWriter.ToString());
        //Response.End();
        Exprot("application/ms-excel","Employee.xls");
    }

    //导出Word
    protected void btnToWord_Click(object sender, EventArgs e)
    {
        //这里将导出的方法抽取了出来使用
        Exprot("application/ms-word", "Employee.doc");
    }

    //确认在运行时为指定的 ASP.NET 服务器控件呈现在 HtmlForm 控件中。
    //(检验Asp.Net服务器空间是否呈现在HTMLForm控件中)
    public override void VerifyRenderingInServerForm(Control control)
    {
    /* 对程序说明,在asp.net 1.1中由于对控件呈现不是很严格,
    * 所以无需override void VerifyRenderingInServerForm(Control control)这个方法
    * 但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法
    * 中它自己调用才能成功,在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,
    * 你明明写在服务器控件Form内,它照样会这样提醒你,
    * 实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。
    * 如果不override VerifyRenderingInServerForm就会报错。
    * 我们override void VerifyRenderingInServerForm(Control control)这个方法,
    * 里面不写任何代码即可*/
       //base.VerifyRenderingInServerForm(control);
    }

    /// <summary>
    /// 分页
    /// </summary>
    protected void gvPersonList_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvPersonList.PageIndex = e.NewPageIndex;
        BindGridView();
    }
}

 

需要注意的是:在asp.net2.0环境下,VerifyRenderingInServerForm(Control control)这个方法不override的话,则会出现“错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内”这个错误。

  分页的情况下如果不想就得到一页的数据需要导出所有的数据:

1.由于gridview的内容可能是分页显示的,因此,这里在每次导出excel时,先将gridview的allowpaging属性设置为false,然后databind()一下,确保得到所有数据;

2.不用单独设置导出的路径,导出时会弹出对话框让你确认保存位置;

3.要写一个空的VerifyRenderingInServerForm方法(必须写),以确认在运行时为指定的ASP.NET 服务器控件呈现HtmlForm 控件;

4.导出后别忘记再重新设置其allowpaging属性;
  当我把这些都设置好以后,点击[导出],出现了只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render(); ) 的错误,又检查代码,没发现问题啊,搞了一会弄不出来,然后搜索了一下,发现了解决办法:
修改你的aspx文件中的:
<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true" CodeFile="SysUser.aspx.cs" Inherits="Autho_SysUser2" %>

增加红色的部分就ok了。

 

 protected void btnToWord_Click(object sender, EventArgs e)
    {
        gvPersonList.AllowPaging = false;
        gvPersonList.AllowSorting = false;
        BindGridView();
        Exprot("application/ms-word", "Employee.doc");
        gvPersonList.AllowPaging = true;
        gvPersonList.AllowSorting = true;
        BindGridView();
    }

 

 

分享到:
评论

相关推荐

    asp.net Gridview Export PDF,Word,Excel,Csv等等(GridView导出为Excel,word,pdf,csv)源代码

    然而,仅限于网页显示有时并不足够,我们常常需要将GridView中的数据导出到其他格式,如PDF、Word、Excel或CSV,以便用户可以离线查看或进一步处理。本主题主要围绕如何实现ASP.NET GridView控件的数据导出功能进行...

    将GridView导出到Excel和Word

    总的来说,将GridView导出到Excel和Word是.NET Web应用程序中常见的需求,涉及到了文件操作、数据转换、样式复制等多个技术点。通过选择合适的库和正确的方法,我们可以提供用户友好的数据导出功能,增强应用程序的...

    gridview导出word excel

    对于导出到Excel,这个过程与Word类似,但需要使用OpenXML库处理Excel工作表。步骤如下: 1. 创建一个StringBuilder,将GridView转换为CSV(逗号分隔值)格式,因为Excel可以轻松地识别和导入CSV。 2. 使用...

    gridview数据导出到word或Excel完整案例

    而“gridview数据导出到word或Excel完整案例”是一个实用的功能,它允许用户将GridView中的数据保存为Word文档或Excel表格,便于进一步的编辑、打印或分享。这个完整的demo包含了实现这一功能所需的所有步骤和技术,...

    将gridview数据导出到word和excel

    接下来,我们讨论如何将GridView数据导出到Excel。Excel操作同样可以通过`Microsoft.Office.Interop.Excel`库实现: 1. 引用Excel库:在项目中添加对`Microsoft.Office.Interop.Excel`的引用。 2. 创建Excel应用...

    ASPxGridView 导出

    // 导出到 Excel // this.ASPxGridViewExporter1.WriteRtfToResponse(); // 导出到 Word } ``` - **WriteXlsToResponse()**:将 GridView 的数据导出为 Excel 文件。 - **WriteRtfToResponse()**:将 GridView 的...

    TreeView实现复选联动及GridView导出Excel

    YYControls应用之TreeView实现复选联动及GridView导出Excel、Word、Text 联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置其所有子复选框为选中状态;取消选中指定的父复选框,则设置其所有子复...

    C#gridview,table导出到Excel和Word

    总结来说,从C# GridView导出到Excel和Word主要涉及将GridView数据转换为HTML,然后利用HTTP响应将HTML发送到客户端,由浏览器以相应格式打开。这个过程可以通过调整Response的属性和使用适当的文本写入工具来实现。...

    如何扩展GridView之自带Excel和Word导出

    然而,原生的GridView并不支持直接将数据导出到Excel或Word文档,这对于需要生成报表或者进行数据交换的场景来说是一个限制。本教程将详细介绍如何扩展GridView,使其具备自定义的Excel和Word导出功能。 首先,我们...

    GridView导出Excel

    在 Web 开发中,将数据从 GridView 控件导出到 Excel 或 Word 文件是常见的需求之一。本文将详细介绍如何使用 C# 实现这一功能。 #### GridView 控件简介 GridView 是 ASP.NET 提供的一种用于展示数据的控件,它能...

    GridView导出EXCEL,Word等

    C#,asp.net, 很好很全

    repeater,和GridView导出数据到Excel或是word

    项目中会用到将网页查询到的数据,导出到Excel中。我将文档整理了

    扩展GridView控件-导出数据源的数据为Excel、Word或Text

    "扩展GridView控件-导出数据源的数据为Excel、Word或Text"可能是项目的一个主文件或者示例代码,而"YYControls"和"Web"可能分别代表自定义控件和Web应用程序的代码目录。 在实际开发中,为了提高性能和用户体验,...

    gridview导出PDF-WORLD-EXCEL

    综上所述,"gridview导出PDF-WORLD-EXCEL"涉及到的关键技术主要是GridView的数据处理,以及利用第三方库将数据转换为PDF、Word(可能为Excel的误写)和Excel格式。理解并掌握这些技能,将有助于开发出功能强大的数据...

    gridview导出为word、excel、pdf格式源代码(项目实例实现)

    gridview导出为word、excel、pdf格式源代码,三个按钮分别实现三个功能,通过实例实现,下载完直接运行即可,其中pdf的实现通过itextsharp.dll,非常好的源代码,希望给你带来学习上的帮助

    Asp.NETGridView导出Word或Execl

    本文将详细讲解如何实现GridView导出到Word或Excel,这对于需要进行数据报表导出的项目非常实用。我们将使用C#语言来完成这个功能。 首先,我们需要了解GridView的基本操作。GridView可以通过DataBind方法绑定数据...

    GridView导入Eecel、word示例

    **三、GridView导出到Excel** 1. **创建Excel工作簿**:使用`Microsoft.Office.Interop.Excel`或EPPlus库创建新的Excel工作簿。 2. **复制GridView数据**:可以通过遍历GridView的行和列,将数据显示到Excel工作表...

    GridView Export To Word or Excel

    在某些场景下,我们可能需要将GridView中的数据导出到Word或Excel文档,以便进行进一步处理或分享。"GridView Export To Word or Excel"就是这样一个功能,它允许用户将网页上的GridView数据导出为Microsoft Word或...

Global site tag (gtag.js) - Google Analytics