GridView 输出到 Excel 并进行格式化处理
作者:孟宪会 发布日期:2004-09-04 11:11:20

在我们把 GridView 上的数据导入到Excel的时候,如果遇到比较长的数字字符串,比如身份证号码,就会在Excel里当成数字看待,并转换成科学计数法的格式,造成数据的丢失,下面这个方法就解决了这个问题,并示例如何进行其它的格式化。

查看例子

ASPX 代码
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  protected
void Page_Load(object sender, EventArgs e)
  {
    
if (!Page.IsPostBack)
    {
      GridView1.DataSource
= this.CreateDataSource();
      GridView1.DataBind();
    }
  }

  System.Data.DataTable CreateDataSource()
  {
    System.Data.DataTable dt
= new System.Data.DataTable();
    System.Data.DataRow dr;
    dt.Columns.Add(
new System.Data.DataColumn("身份证号码", typeof(string)));
    dt.Columns.Add(
new System.Data.DataColumn("图书单价", typeof(decimal)));
    dt.Columns.Add(
new System.Data.DataColumn("购买数量", typeof(Int32)));
    dt.Columns.Add(
new System.Data.DataColumn("总价格", typeof(decimal)));

    
for (int i = 0; i < 6; i++)
    {
      dr
= dt.NewRow();
      dr[
0] = "123456789123456789123456789";
      dr[
1] = 100 * i / 3.0;
      dr[
2] = i + 5;
      dr[
3] = (decimal)dr[1] * (Int32)dr[2];
      dt.Rows.Add(dr);
    }
    
return dt;
  }
  protected
void Button1_Click(object sender, EventArgs e)
  {
    Response.Clear();
    Response.Buffer
= true;
    Response.Charset
= "GB2312";
    Response.AppendHeader(
"Content-Disposition", "attachment;filename=FileName.xls");
    Response.ContentEncoding
= System.Text.Encoding.GetEncoding("GB2312");
    Response.ContentType
= "application/ms-excel";//设置输出文件类型为excel文件。
    this.EnableViewState = false;
    System.Globalization.CultureInfo myCItrad
= new System.Globalization.CultureInfo("ZH-CN", true);
    System.IO.StringWriter oStringWriter
= new System.IO.StringWriter(myCItrad);
    System.Web.UI.HtmlTextWriter oHtmlTextWriter
= new System.Web.UI.HtmlTextWriter(oStringWriter);
    
this.GridView1.RenderControl(oHtmlTextWriter);
    Response.Write(oStringWriter.ToString());
    Response.End();
  }
  
  public override
void VerifyRenderingInServerForm(Control control)
  {
  }
  protected
void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  {
    
if (e.Row.RowType == DataControlRowType.DataRow)
    {
      e.Row.Cells[
0].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
      e.Row.Cells[
3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00");
    }
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  
<title></title>
</head>
<body>
  
<form id="form1" runat="server">
  
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
  
</asp:GridView>
  
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="导出" />
  
</form>
</body>
</html>


 

原文地址:http://dotnet.aspx.cc/article/8a4cbf47-b888-4832-3389-ed3a3a3c8aab/print.aspx
© 版权所有 【孟宪会之精彩世界】TM 2012