GridView导出Excel

找了一个导出Excel的例子,比较实用。

定义
    public class ExportExcel
    {

        public static void PrepareGridViewForExport(Control gv)
        {

            LinkButton lb = new LinkButton();

            Literal l = new Literal();

            string name = String.Empty;

            for (int i = 0; i < gv.Controls.Count; i++)
            {

                if (gv.Controls[i].GetType() == typeof(LinkButton))
                {

                    l.Text = (gv.Controls[i] as LinkButton).Text;

                    gv.Controls.Remove(gv.Controls[i]);

                    gv.Controls.AddAt(i, l);

                }

                else if (gv.Controls[i].GetType() == typeof(DropDownList))
                {

                    l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text;

                    gv.Controls.Remove(gv.Controls[i]);

                    gv.Controls.AddAt(i, l);

                }

                else if (gv.Controls[i].GetType() == typeof(CheckBox))
                {

                    l.Text = (gv.Controls[i] as CheckBox).Checked ? "True" : "False";

                    gv.Controls.Remove(gv.Controls[i]);

                    gv.Controls.AddAt(i, l);

                }

                if (gv.Controls[i].HasControls())
                {

                    PrepareGridViewForExport(gv.Controls[i]);

                }

            }
        }

        public static void ExportGridView(GridView GridView1, string filename)
        {

            string attachment = "attachment; filename=" + filename + ".xls";

            HttpResponse Response = HttpContext.Current.Response;

            Response.ClearContent();

            Response.AddHeader("content-disposition", attachment);

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

            StringWriter sw = new StringWriter();

            HtmlTextWriter htw = new HtmlTextWriter(sw);

            // Create a form to contain the grid

            HtmlForm frm = new HtmlForm();

            GridView1.Parent.Controls.Add(frm);

            frm.Attributes["runat"] = "server";

            frm.Controls.Add(GridView1);

            frm.RenderControl(htw);

            //GridView1.RenderControl(htw);

            Response.Write(sw.ToString());

            Response.End();

        }
    }

调用:

protected void Button1_Click(object sender, EventArgs e)
    {
        BindGridView();
        this.GridView1.AllowPaging = false;
        this.GridView1.DataBind();
        //上面的是当你有分页时就可以加上去,BindGridView函数里又变回去,
        ExportExcel.PrepareGridViewForExport(GridView1);
        ExportExcel.ExportGridView(GridView1, "周奖");
    }

当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示。
有两种方法可以解决以上问题:
1.修改web.config(不推荐)<pages enableEventValidation ="false" ></pages>
2.直接在导出Execl的页面修改

<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true"

 CodeFile="ExportGridView.aspx.cs" Inherits="ExportGridView" %>

posted on 2008-03-25 16:20  RIVERSPIRIT  阅读(829)  评论(5)    收藏  举报