我有一个GridView,其中列是动态的.GridView绑定到DataTable.
其中一列是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();
Run Code Online (Sandbox Code Playgroud)
我假设您正在使用带有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();
}
}
Run Code Online (Sandbox Code Playgroud)
此代码将创建一个on row数据绑定事件,然后解析文本,并按照您希望的方式对其进行格式化.这只会在您知道日期始终位于特定列中时才有效.
如果您想要动态列但更多控制的另一个选项是将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);
Run Code Online (Sandbox Code Playgroud)