在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.github.com" />
<meta name="subject" content="" />
<meta name="language" content="gb2312" />
<meta name="keywords" content="" />
<meta name="Copyright" content="www.github.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.github.com/Files/71/66/285.Aspx