在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");
这是以字符串型式显示的.
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 的窗体标记内
这样的错误,因此在导出前应该把相关的列给隐藏起来。我是这样做的。
================= ==================
==================
======
DisableControlColumns返回包括控件的列。
然后在导出时隐藏这些列,然后导出后还原。
这样的错误,因此在导出前应该把相关的列给隐藏起来。我是这样做的。
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;
}
}
... {
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返回包括控件的列。
然后在导出时隐藏这些列,然后导出后还原。