海豚宝宝的代码生活

专注于.Net系统开发

导航

从数据库导入Excel的方法总结

要在ASP.Net中把数据库中的数据导入到Excel中有如下的几种方法:
一.   RenderControl的方法
 1*
 2*    // by XiaoYin [10/22/2006]
 3*/
 4using System;
 5using System.Data;
 6using System.Configuration;
 7using System.Web;
 8using System.Web.Security;
 9using System.Web.UI;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12using System.Web.UI.HtmlControls;
13using System.Data.SqlClient;
14using System.Xml;
15
16public partial class _Default : System.Web.UI.Page 
17{
18
19    /**//// <summary>
20    /// 链接字符串
21    /// </summary>

22    public string ConnectString
23    {
24        get
25        {
26            return ConfigurationManager.AppSettings["ConnectionString"];
27        }

28    }

29
30    /**//// <summary>
31    /// 重载VerifyRenderingInServerForm方法
32    /// 确认在运行时为指定的 ASP.NET 服务器控件呈现 HtmlForm 控件。
33    /// </summary>
34    /// <param name="control">ASP.NET 服务器控件,它必须位于 HtmlForm 控件中</param>

35    public override void VerifyRenderingInServerForm(Control control)
36    {
37        //base.VerifyRenderingInServerForm(control);
38    }

39
40
41    protected void Page_Load(object sender, EventArgs e)
42    {
43        if (!Page.IsPostBack)
44        {
45            BindData();
46        }

47    }

48
49    /**//// <summary>
50    /// 绑定数据
51    /// </summary>

52    public void BindData()
53    {
54        // 查询
55        string query = "SELECT * FROM Categories";
56        SqlConnection myConnection = new SqlConnection(ConnectString);
57        SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
58        DataSet ds = new DataSet();
59        ad.Fill(ds, "Categories");
60        GridView1.DataSource = ds;
61        GridView1.DataBind();
62    }

63
64    /**//// <summary>
65    /// 内存分页
66    /// </summary>
67    /// <param name="sender"></param>
68    /// <param name="e"></param>

69    protected void Paging(object sender, GridViewPageEventArgs e)
70    {
71        GridView1.PageIndex = e.NewPageIndex;
72        BindData();
73    }

74
75    protected void Button1_Click(object sender, EventArgs e)
76    {
77        Response.Clear();
78        Response.Buffer = true;
79        Response.Charset = "GB2312";
80        Response.AppendHeader("Content-Disposition""attachment;filename=FileName.xls");
81        //gaoyang [10/21/2006] 经测试如果设置为 GetEncoding("GB2312"),导出的文件将会出现乱码。
82        Response.ContentEncoding = System.Text.Encoding.UTF7;
83
84        //设置输出文件类型为excel文件。 
85        Response.ContentType = "application/ms-excel";
86        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
87        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
88        this.GridView1.RenderControl(oHtmlTextWriter);
89        Response.Output.Write(oStringWriter.ToString());
90        Response.Flush();
91        Response.End();
92    }

93}

94
注意以下几点:
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效果好些;
因人而异了:)
3. 在导出数据项前加上'&nbsp;'
导入Excel 时, 数字字符的数据会因Excel中的科学计数法, 导致数值过大的数据丢失后几位数.

二. 逐行写入法
private void ExportToExcel() 
{
    
//设置文件格式为Excel

    Response.ContentType 
= "application/ms-excel";

    
//设置导出的文件名,要替换你自己的文件

    Response.AddHeader(
"Content-Disposition",  "inline;filename=Filename.xls");

    
//写第一行的表格头(Grid的表头)

     
forint iCol=0; iCol< 列数; iCol++)

    Response.Write( “表格头的内容” 
+ Convert.ToChar(9));

    Response.Write(
"\n"); 

    
foreach (每行)
    
{
        
forint iCol=0; iCol< 列数; iCol++)
            Response.Write( “实际的数据,即Grid的内容” 
+ Convert.ToChar(9));

        Response.Write(
"\n"); 
    }


    Response.Write(
"\n"); 
    Response.End();  

    }


}


posted on 2006-12-15 13:04  Bruse  阅读(620)  评论(0编辑  收藏  举报