在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配置:

<?xml version="1.0"?>
<!-- 
    注意: 除了手動編輯此文件以外,您還可以使用 
    Web 管理工具來配置應用程序的設置。可以使用 Visual Studio 中的
     “網站”->“Asp.Net 配置”選項。
    設置和註釋的完整列表在 
    machine.config.comments 中,該文件通常位於 
    /Windows/Microsoft.Net/Framework/v2.x/Config 中
-->
<configuration>
    
<appSettings>
        
<!--數據庫連接串-->
        
<add key="ConnectionString" value="data source=.;initial catalog=Northwind;user id=sa;password=sa;persist security info=true;packet size=4096"/>
    
</appSettings>
    
<connectionStrings/>
    
<system.web>
        
<!-- 
            設置 compilation debug="true" 將調試符號插入
            已編譯的頁面中。但由於這會 
            影響性能,因此只在開發過程中將此值 
            設置爲 true。
        
-->
        
<compilation debug="true"/>
        
<!--
            通過 <authentication> 節可以配置 ASP.NET 使用的 
            安全身份驗證模式,
            以標識傳入的用戶。 
        
-->
        
<authentication mode="Windows"/>
        
<!--
            如果在執行請求的過程中出現未處理的錯誤,
            則通過 <customErrors> 節可以配置相應的處理步驟。具體說來,
            開發人員通過該節可以配置
            要顯示的 html 錯誤頁
            以代替錯誤堆棧跟蹤。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        
-->
    
</system.web>
</configuration>

ASPX頁面代碼:

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

<!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>
        
&nbsp;
        
<asp:GridView ID="GridView1" runat="server" AllowPaging="true" OnPageIndexChanging="Paging">
        
</asp:GridView>
    
    
</div>
        
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="導出到Excel" />
    
</form>

</body>
</html>


實例代碼:

/*
 *    // by XiaoYin [10/22/2006]
 
*/

using System;
using System.Data;
using System.Configuration;
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.Data.SqlClient;
using System.Xml;

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

    
/// <summary>
    
/// 鏈接字符串
    
/// </summary>

    public string ConnectString
    
{
        
get
        
{
            
return ConfigurationManager.AppSettings["ConnectionString"];
        }

    }


    
/// <summary>
    
/// 重載VerifyRenderingInServerForm方法
    
/// 確認在運行時爲指定的 ASP.NET 服務器控件呈現 HtmlForm 控件。
    
/// </summary>
    
/// <param name="control">ASP.NET 服務器控件,它必須位於 HtmlForm 控件中</param>

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



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

    }


    
/// <summary>
    
/// 綁定數據
    
/// </summary>

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


    
/// <summary>
    
/// 內存分頁
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

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


    
protected void Button1_Click(object sender, EventArgs e)
    
{
        Response.Clear();
        Response.Buffer 
= true;
        Response.Charset 
= "GB2312";
        Response.AppendHeader(
"Content-Disposition""attachment;filename=FileName.xls");
        
//gaoyang [10/21/2006] 經測試如果設置爲 GetEncoding("GB2312"),導出的文件將會出現亂碼。
        Response.ContentEncoding = System.Text.Encoding.UTF7;

        
//設置輸出文件類型爲excel文件。 
        Response.ContentType = "application/ms-excel";
        System.IO.StringWriter oStringWriter 
= new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter 
= new System.Web.UI.HtmlTextWriter(oStringWriter);
        
this.GridView1.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();
    }

}

 
發佈了30 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章