2010-11-22 94 views
2

我有一个GridView,其中的列是动态的。 GridView被绑定到一个DataTable。格式动态GridView

其中一列是DateTime列。我需要格式化该列以显示“01/01/2010”而不是“01/01/2010 12:00:00 AM”。

我不能更改列来存储字符串而不是DateTime。

什么是做到这一点的最好方法是什么?

<asp:GridView ID="gvResults" runat="server"> 
</asp:GridView> 


CustomReportDataTable dt = new CustomReportDataTable(); 
dt.LoadData(); 
gvResults.DataSource = dt; 
gvResults.DataBind(); 

回答

6

我假设你正在使用带有AutoGenerateColumns的网格,如果是这样的话,我不确定是否有正确的方法来做到这一点,但这是一种快速和肮脏的方式来改变正在输出。

protected void grdTest_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.DataItem != null) 
     { 
      e.Row.Cells[1].Text = DateTime.Parse(e.Row.Cells[1].Text).ToShortDateString(); 
     } 
    } 

此代码将创建一个行数据绑定事件,然后解析文本,并以您想要的方式进行格式化。如果您知道该日期始终位于特定列中,则此功能只能起作用。

另一种选择,如果你想动态列,但更多的控制将是设置AutoGenerateColumns为false,并动态填充你想要的列之前,你想绑定它的网格视图的列,这样你可以使用数据格式字符串。这是多一点的工作,但你仍然可以控制你的列:

BoundField Col1 = new BoundField(); 
Col1.DataField = "StringFieldName"; 

BoundField Col2 = new BoundField(); 
Col2.DataField = "DateFieldName"; 
Col2.DataFormatString = "{0:d}"; 

grdTest.Columns.Add(Col1); 
grdTest.Columns.Add(Col2); 
0

将列添加到网格视图时,可以设置“DisplayFormat”以显示货币。

+0

你有一个如何做到这一点的例子吗? – Steven 2010-11-22 20:53:47