在DataGrid内控制单元格显示内容的格式,如时间格式的时候如果AutoGenerateColumns=false那么绑定列中设置 DataFormatString="{0:dd/mm/yyyy}" 就可以做到了可是AutoGenerateColumns=true的时候,就不好办了一个办法,可以在sql语句中使用convert或者cast函数转换一下。我们正在做的一个项目中有个动态查询功能,是根据用户选择的条件、需显示的字段来动态生成Sql语句(破坏了三层结构,不知道其他朋友如何做?)来查询的。如果用Sql的函数将非常麻烦,我采用了如下方法,在后台绑定数据的时候设置内容格式。
示例:
<% @ Page Language="C#" Debug="true" %> <% @ Import Namespace="System.Data" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > < html xmlns ="http://www.w3.org/1999/xhtml" xml:lang ="gb2312" lang ="gb2312" > < head > < title > AutoGenerateColumns为true时,在Codebehind内设置内容的DataFormatString </ title > < meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" /> < meta name ="title" content ="" /> < meta name ="author" content ="活靶子,Huobazi,www.AspxBoy.com" /> < meta name ="subject" content ="" /> < meta name ="language" content ="gb2312" /> < meta name ="keywords" content ="" /> < meta name ="Copyright" content ="www.AspxBoy.com" /> < meta name ="robots" content ="all" /> < script language ="c#" runat ="server" > void BindGrid(){ DataTable dt = new DataTable(); DataRow dr; dt.Columns.Add(new DataColumn("我是日期", typeof(DateTime))); dt.Columns.Add(new DataColumn("俺也是日期", typeof(DateTime))); dt.Columns.Add(new DataColumn("偶也是日期啊,怎么我还带着时间?",typeof(DateTime))); for (int i = 0; i < 10; i++) { dr = dt.NewRow(); dr[0] = DateTime.Now; dr[1] = DateTime.Now; dr[2] = DateTime.Now; dt.Rows.Add(dr); } dg.DataSource= dt; dg.DataBind();}void Page_Load(object o, EventArgs e){ if(!IsPostBack) { BindGrid(); }}void ItemDataBound(object o , DataGridItemEventArgs e){ if(e.Item.ItemType==ListItemType.Item ||e.Item.ItemType==ListItemType.AlternatingItem ) { DataRowView drv = (DataRowView)e.Item.DataItem; for(int i=0;i<e.Item.Cells.Count;i++) { e.Item.Cells[i].Wrap = false; string columnName=drv.Row.Table.Columns[i].ColumnName; if( columnName.StartsWith("我") ) { e.Item.Cells[i].Text = ((DateTime)drv[columnName]).ToString("yyyy-MM-dd"); //也可以这样 //e.Item.Cells[i].Text = DataBinder.Eval(e.Item.DataItem,columnName,"{0:yyyy-MM-dd}"); } if( columnName.StartsWith("俺") ) { e.Item.Cells[i].Text = ((DateTime)drv[columnName]).ToString("dd/MM/yy"); //也可以这样 //e.Item.Cells[i].Text = DataBinder.Eval(e.Item.DataItem,columnName,"{0:yy-MM-dd}"); } } }} </ script > </ head > < body > < form runat ="server" > < ASP:DataGrid id ="dg" runat ="server" HeaderStyle-BackColor ="#aaaadd" AutoGenerateColumns ="true" OnItemDataBound ="ItemDataBound" Width ="100%" > </ asp:DataGrid > </ form > </ body > </ html >
http://www.aspxboy.com/Files/71/66/285.Aspx
转载于:https://www.cnblogs.com/huobazi/archive/2004/11/16/DataFormatStringInCodebehind.html
相关资源:垃圾分类数据集及代码