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();
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 >
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 >