代码改变世界

DataGrid 转 Excel (asp.net)

2006-02-28 11:21  Bluetooth  阅读(262)  评论(0编辑  收藏  举报
Response.Clear();
   Response.AddHeader(
"content-disposition""attachment;filename=FileName.xls");
   Response.Charset 
= "";
   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   Response.ContentType 
= "application/vnd.xls";
   System.IO.StringWriter stringWrite 
= new System.IO.StringWriter();
   System.Web.UI.HtmlTextWriter htmlWrite 
= new HtmlTextWriter(stringWrite);
   
this.WebCustomControl12.RenderControl(htmlWrite);
   Response.Write(stringWrite.ToString());
   Response.End();
 
  好像是直接把控件转到html然后再输出到Excel,不仅仅是dataGrid哦。
 把this.WebCustomControl12换成this.datagrid1即可。
 若是转到word里面,将ContentType="application/word.doc";
超强。老外写的。

 新的: 
         
<script runat="server">

    
protected void GridToExcel(GridView GridView1, String filename,System.Data.DataSet ds)
    
{
        Response.Clear();
        Response.AddHeader(
"content-disposition""attachment;filename="+filename+".xls");
        Response.Charset 
= "utf-8";
        Response.ContentType 
= "application/vnd.xls";
        System.IO.StringWriter stringWrite 
= new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite 
= new HtmlTextWriter(stringWrite);

        GridView1.ShowHeader 
= false;
        GridView1.AllowPaging
= false;
        GridView1.DataSource 
= ds;
        GridView1.DataBind();
        GridView1.RenderControl(htmlWrite);

        Response.Write(stringWrite.ToString());
        Response.End();
        GridView1.AllowPaging 
= true;
        GridView1.DataSource 
= ds;
        GridView1.DataBind();
 
    }

    
protected void GridToExcel(GridView GridView1, String filename, System.Data.DataSet ds,Boolean DisableControl)
    
{
        DisableControls(GridView1);
        Response.Clear();
        Response.AddHeader(
"content-disposition""attachment;filename=" + filename + ".xls");
        Response.Charset 
= "utf-8";
        Response.ContentType 
= "application/vnd.xls";
        System.IO.StringWriter stringWrite 
= new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite 
= new HtmlTextWriter(stringWrite);

        GridView1.ShowHeader 
= false;
        GridView1.AllowPaging 
= false;
        GridView1.DataSource 
= ds;
        GridView1.DataBind();
        GridView1.RenderControl(htmlWrite);

        Response.Write(stringWrite.ToString());
        Response.End();
        GridView1.AllowPaging 
= true;
        GridView1.DataSource 
= ds;
        GridView1.DataBind();

    }

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

    
protected void DisableControls(Control control1)
    
{
        LinkButton lb 
= new LinkButton();
        Literal l 
= new Literal();
        
for (int i = 0; i < control1.Controls.Count; i++)
        
{
            
if (control1.Controls[i].GetType() == typeof(LinkButton))
            
{
                l.Text 
= (control1.Controls[i] as LinkButton).Text;
                control1.Controls.Remove(control1.Controls[i]);
                control1.Controls.AddAt(i, l);
            }

            
if (control1.Controls[i].HasControls())
                DisableControls(control1.Controls[i]);
//递归,检查子控件下是否还有子控件。
        }

    }

    
protected void LinkButton_Command(Object sender, CommandEventArgs e)
    
{
        GridView GridView1 
= new GridView();
        GridView1.Caption 
= (String)Session["DataHeader"];
        System.Data.DataSet ds1 
= Session["DataSet"as System.Data.DataSet;
        
switch (e.CommandName)
        
{
            
case "ToExcelNone":
                GridToExcel(GridView1, TextBox1.Text, ds1, 
true);
                
break;
            
case "ToExcel":
                GridToExcel(GridView1, TextBox1.Text, ds1);
                
break;
        }

        Session.Remove(
"DataSet");
        Session.Remove(
"DataHeader");
    }


</script>