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

来源:互联网 发布:sql语句括号的用法 编辑:程序博客网 时间:2024/05/17 23:04
在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返回包括控件的列。
然后在导出时隐藏这些列,然后导出后还原。

 

原创粉丝点击