jackyrong

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  722 Posts :: 2 Stories :: 892 Comments :: 42 Trackbacks

 asp.net 2.0中,gridview控件是个很不错的控件,如何将gridview中的数据导出到EXCEL中去呢?特别是当gridview中的数据是分页显示时,要将整个gridview的数据导出到EXCEL中去呢?下面是解决的办法:
下面是部分代码片段:
defualt.aspx中,添加一个gridview控件
  <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>

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

    }
   
    private void BindData()
    {
        // make the query
        string query = "SELECT * FROM customers";
        SqlConnection myConnection = new SqlConnection(ConnectionString);
        SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
        DataSet ds = new DataSet();
        ad.Fill(ds, "customers");
        GridView1.DataSource = ds;
        GridView1.DataBind();

   }


    public override void VerifyRenderingInServerForm(Control control)
    {

        // Confirms that an HtmlForm control is rendered for

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Clear();

        Response.AddHeader("content-disposition",
        "attachment;filename=FileName.xls");

        Response.Charset = "gb2312";
        Response.ContentType = "application/vnd.xls";

        System.IO.StringWriter stringWrite = new System.IO.StringWriter();

        System.Web.UI.HtmlTextWriter htmlWrite =
        new HtmlTextWriter(stringWrite);

       
        GridView1.AllowPaging = false;
        BindData();
        GridView1.RenderControl(htmlWrite);

        Response.Write(stringWrite.ToString());

        Response.End();

        GridView1.AllowPaging = true;
        BindData();

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

posted on 2006-01-21 10:32 jackyrong的世界 阅读(3091) 评论(11)  编辑 收藏 所属分类: .NET

Feedback

#1楼  2006-02-26 09:02 劲舞团 [未注册用户]
不错。。。收藏了。。。。
  回复  引用    

#2楼  2006-03-20 19:53 两点草 [未注册用户]
大虾您好!

运行时GridView1.RenderControl(htmlWrite); 这句有问题啊 出异常!
  回复  引用    

#3楼  2006-06-27 09:28 末末 [未注册用户]
确实有问题啊,用不了
  回复  引用    

#4楼  2006-09-26 14:17 天歆      
导出的数据包含中文的话,则在中文部分将显示乱码,这个问题如何解决呢?
  回复  引用  查看    

运行时GridView1.RenderControl(htmlWrite); 这句有问题啊 出异常
  回复  引用    

#6楼  2006-09-30 16:33 天歆      
找到解决中文部分乱码的方法了。

我专门写了个无分页gridview简单导出显示的所有数据到Excel的方法,只能满足我自己的需要。也许可以参考一下
public static void ExportToExcel(string Filename, GridView gridview,Page page)
{
page.Response.Clear();
// 防止中文内容为乱码
page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
//可令中文文件名不为乱码
page.Response.AppendHeader("content-disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(Filename + DateTime.Now.ToShortDateString(), System.Text.Encoding.UTF8) + ".xls\"");
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gridview.RenderControl(htw);
page.Response.Write(sw.ToString());
page.Response.End();
}

调用方法:类.ExportToExcel("中文文件名",GridView1,this.Page);
直接在页面的cs中写导出的话去掉Page.Response中的Page就可以了
  回复  引用  查看    

#7楼  2006-10-21 19:52 箫音 [未注册用户]
运行时GridView1.RenderControl(htmlWrite); 这句有问题啊 出异常
  回复  引用    

有问题,加上以下代码:

public override void VerifyRenderingInServerForm(Control control)
{

}
  回复  引用    

#9楼 [楼主] 2006-10-25 18:19 jackyrong的世界      
本来上文就有这代码哦
  回复  引用  查看    

如果启用了GridView自带的分页、排序、选择属性,运行时GridView1.RenderControl(htmlWrite); 这句就有问题。
  回复  引用    

#11楼  2008-01-16 00:45 Ettore [未注册用户]
Do you need a really fast export into XML/XSLX Excel formats.

Try http://www.gridviewtoexcel.com

Regards
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: