您的位置:首页 > 其它

Gridview导出excel当前页与所有页的方法!

2011-11-09 16:34 363 查看
using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.IO;

using System.Text;

using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

}

protected void Button2_Click(object sender, EventArgs e)

{

Export("application/ms-excel", "报名详情表.xls");

}

//将下列代码复制到 .cs 文件中查看

#region GridView当前页 导出到 Excel by tzjly.20111108

/// <summary>

/// GridView 导出 Excel

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

//执行导出命令的“Button”所调用的方法

protected void btnDC_Click(object sender, EventArgs e)

{

Export("application/ms-excel", "报名详情表.xls");

}

//导出 Excel当前页 的方法

public void BindDataToGridView()

{

string str = System.Configuration.ConfigurationManager.ConnectionStrings["kyj2008ConnectionString2"].ConnectionString;

SqlConnection con = new SqlConnection(str);

SqlCommand cmd = new SqlCommand("exec Proc_tzj_zzctj '唐', '2011-10-1','2011-12-31'", con);

SqlDataAdapter sda = new SqlDataAdapter();

sda.SelectCommand = cmd;

DataSet ds = new DataSet();

sda.Fill(ds);

//this.GridView1.DataSource = ds;

this.GridView1.DataBind();

}

private void Export(string FileType, string FileName)

{

Response.Clear();

Response.Buffer = true;

Response.Charset = "GB2312";

Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls"); //这里之所以没有用传进来的参数,是因为生成的 Excel 文件名若为中文时是乱码

Response.ContentEncoding = System.Text.Encoding.UTF7; // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!

Response.ContentType = FileType; //设置输出文件类型为excel文件。

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

System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);

#region 在导出 Excel 前移除 GridView 的各种样式,但是要移除所有相关元素的样式比较繁琐,所以如果想移除所有样式再导出的话可以新建一个包含 GridView(不含任何样式) 的页面,然后绑定需要的数据再用导出

this.GridView1.Columns[this.GridView1.Columns.Count - 1].Visible = false; //可以将不想导出的列隐藏(这里隐藏了 GridView 中的最后一列“删除”列)

//this.GridView1.HeaderStyle.Reset(); //导出 Excel 前移除 GridView 中 Header 的样式

//this.GridView1.RowStyle.Reset(); //导出 Excel 前移除 GridView 中 Row 的样式

this.GridView1.PagerStyle.Reset(); //导出 Excel 前移除 GridView 中 Pager 的样式

//this.GridView1.ControlStyle.Reset(); //导出 Excel 前移除 GridView 中 Control 的样式 [ 即套用的 GridView 格式 ]

#endregion

this.GridView1.RenderControl(oHtmlTextWriter); //这里应该也可以导出 Repeater 控件中的信息的

this.GridView1.AllowPaging = false;

Response.Output.Write(oStringWriter.ToString());

Response.Flush();

Response.End();

// this.GridView1.AllowPaging = true;

}

#endregion

#region GridView导出所有页到excel by tzjly.20111109----

private void Export2(string FileType, string FileName)

{

//清楚分页

GridView1.AllowPaging = false;

BindDataToGridView();

Response.Clear();

Response.Buffer = true;

//设定输出的字符集

Response.Charset = "GB2312";

//解决导出到Excel2007乱码问题

Response.Write("<meta http-equiv=Content-Type content=text/html;charset=GB2312>");

//假定导出的文件名为盘点结果表.xls

Response.AppendHeader("Content-Disposition", "attachment;filename=" +

HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());

//解决导出到Excel2007乱码问题

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

//设置导出文件的格式

Response.ContentType = FileType;

//关闭ViewState

this.EnableViewState = false;

StringWriter stringWriter = new StringWriter();

HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);

GridView1.RenderControl(textWriter);

//把HTML写回浏览器

Response.Write(stringWriter.ToString());

Response.Flush();

Response.End();

GridView1.AllowPaging = true;//恢复分页

//为GridView重新绑定数据源

BindDataToGridView();

}

//下面这个方法是 将 GridView 导出 Excel 时必须需要的,否则会报错,可以去掉查看报错信息

public override void VerifyRenderingInServerForm(Control control)

{

}

//下面可以使当导出的单元格内为较长的数字(如:身份证)时不显示成科学计数法

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.DataRow)

{

e.Row.Cells[4].Attributes.Add("style", "vnd.ms-excel.numberformat:@");

e.Row.Cells[5].Attributes.Add("style", "vnd.ms-excel.numberformat:@");

e.Row.Cells[6].Attributes.Add("style", "vnd.ms-excel.numberformat:@");

}

}

#endregion

protected void btnDC2_Click(object sender, EventArgs e)

{

Export2("application/ms-excel", "所有刷卡记录.xls");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: