读书人

Gridview导出到excel中汉字出现乱码的

发布时间: 2012-08-28 12:37:01 作者: rapoo

Gridview导出到excel中汉字出现乱码的问题(支持EXCEL 03)

GridView在导出excel是需要注意一些地方,尤其是在语音包这方面。这里是一个简单的例子,有待改进,但是可以满足导出中午不带乱码的要求。

using System.IO;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace Dave

{

public class GridViewExportUtil

{

public static void Export(string fileName, GridView gv)

{

HttpContext.Current.Response.Clear();

HttpContext.Current.Response.Buffer = false;

HttpContext.Current.Response.Charset = "GB2312";

HttpContext.Current.Response.AddHeader(

"content-disposition", string.Format("attachment; filename={0}", fileName));

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

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

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

using (StringWriter sw = new StringWriter())

{

using (HtmlTextWriter htw = new HtmlTextWriter(sw))

{

// Create a form to contain the grid

Table table = new Table();

// add the header row to the table

if (gv.HeaderRow != null)

{

GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);

table.Rows.Add(gv.HeaderRow);

}

// add each of the data rows to the table

foreach (GridViewRow row in gv.Rows)

{

GridViewExportUtil.PrepareControlForExport(row);

table.Rows.Add(row);

}

// add the footer row to the table

if (gv.FooterRow != null)

{

GridViewExportUtil.PrepareControlForExport(gv.FooterRow);

table.Rows.Add(gv.FooterRow);

}

// render the table into the htmlwriter

table.RenderControl(htw);

// render the htmlwriter into the response

HttpContext.Current.Response.Write(sw.ToString());

HttpContext.Current.Response.End();

}

}

}

/// <summary>

/// Replace any of the contained controls with literals

/// </summary>

private static void PrepareControlForExport(Control control)

{

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

{

Control current = control.Controls[i];

if (current is LinkButton)

{

control.Controls.Remove(current);

control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));

}

else if (current is ImageButton)

{

control.Controls.Remove(current);

control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));

}

else if (current is HyperLink)

{

control.Controls.Remove(current);

control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));

}

else if (current is DropDownList)

{

control.Controls.Remove(current);

control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));

}

else if (current is CheckBox)

{

control.Controls.Remove(current);

control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));

}

if (current.HasControls())

{

GridViewExportUtil.PrepareControlForExport(current);

}

}

}

}

}

读书人网 >编程

热点推荐