之前我有贴过gridview导出excel的代码,但那个有两上缺点,一:如果gridview有分页的话,那段代码只是导出的当前页的数据,第二页之后的数据是无法导出的。二:那段代码我朋友帮我改进后,可以导出所有页的数据,但是我现在再用导出的中文全是乱码。现在我贴的这个,可以避免上面的两个问题。希望对大家有所帮助。
protected void lbtnExport_Click(object sender, EventArgs e)
{
Response.Clear();
Page.Response.Buffer = true;
Response.Charset = "gb2312";
string strFileName = "FileName.xls";
Response.AddHeader("content-disposition", "attachment;filename="+HttpUtility.UrlEncode(strFileName,System.Text.Encoding.UTF8));
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
DataView dv = (DataView)Session["ds"];
string xls = @"<Table><TR>";
int i;
int j;
//导出EXCEL显示的标题
for (i = 1; i < dv.Table.Columns.Count; i++)
{
xls += @"<TD>" + gvAnalyze.Columns[i].ToString() + @"</TD>"; //dv.Table.Columns[i].Caption
}
//数据部分
xls = xls + @"</TR>";
for (i = 0; i < dv.Table.Rows.Count; i++)
{
xls = xls + @"<TR>";
for (j = 0; j < dv.Table.Columns.Count; j++)
{
xls = xls + @"<TD>" + dv.Table.Rows[i][j].ToString() + @"</TD>";
}
xls = xls + @"</TR>";
}
xls = xls + @"</Table>";
Response.Write(xls);
Response.End();
Binding();
}
其中的session["dv"]我在数据绑定方法(即Binding)中给它赋过值了,所以使用的朋友,可以根本自己的要求灵活运用。