今天发现了把DataGrid导出Excel时格式化字符串的方法。

在DataBound事件中设置Cell的style属性就可以了。
这是以字符串型式显示的.
e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");

如果要格式化的话可以这样:
e.Item.Cells[3].Attributes.Add("style","vnd.ms-excel.numberformat:¥#,###.00");

另外,如果DG中有控件的话会提示:“DataGrid1__ctl2__ctl0”必须放在具有 runat=server 的窗体标记内
这样的错误,因此在导出前应该把相关的列给隐藏起来。我是这样做的。

private   void  btnExportExcel_Click( object  sender, System.EventArgs e)
  
{
   
this.Page.Response.Clear();
   
this.Page.Response.AddHeader("content-disposition""attachment;filename=excel.xls");
   
this.Page.Response.Charset = "";
   
//this.Page.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
   this.Page.Response.ContentType = "application/vnd.xls";

   System.IO.StringWriter stringWrite 
= new System.IO.StringWriter();
   System.Web.UI.HtmlTextWriter htmlWrite 
= new System.Web.UI.HtmlTextWriter(stringWrite);
   IList il 
= DisableControlColumns();
   
this.DataGrid1.RenderControl(htmlWrite);
   ShowControlColumns(il);
   
//stringWrite.WriteLine("<style>.text { mso-number-format:/@; } </style>");
   this.Page.Response.Write(stringWrite.ToString());
   
this.Page.Response.End();
  }


  
private  IList DisableControlColumns()
  
{
   IList result 
= new ArrayList();
   
if (this.DataGrid1.Items.Count==0)
    
return result;
   
for (int i=0;i<this.DataGrid1.Columns.Count;i++)
   
{
    
if (this.DataGrid1.Columns[i] is System.Web.UI.WebControls.ButtonColumn)
    
{
     
this.DataGrid1.Columns[i].Visible = false;
     result.Add(
this.DataGrid1.Columns[i]);
     
continue;
    }

    
if (this.DataGrid1.Columns[i] is System.Web.UI.WebControls.TemplateColumn)
    
{
     
for (int j =0 ;j<this.DataGrid1.Items[0].Controls[i].Controls.Count;j++)
     
{
      
if ( this.DataGrid1.Items[0].Controls[i].Controls[j] is System.Web.UI.WebControls.WebControl)
      
{
       
this.DataGrid1.Columns[i].Visible = false;
       result.Add(
this.DataGrid1.Columns[i]);
       
continue;
      }

     }

    }

   }

   
return result;
  }


  
private   void  ShowControlColumns(IList il)
  
{
   
foreach (System.Web.UI.WebControls.DataGridColumn dgc in il)
   
{
    dgc.Visible 
= true;
   }

  }


================= ================== ================== ======
DisableControlColumns返回包括控件的列。
然后在导出时隐藏这些列,然后导出后还原。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值