确定数据源列的数据类型“CreateDate”。确保它正在生成一个实际的日期时间字段,而不是像 varchar 之类的东西。如果您的数据源是存储过程,则完全有可能正在处理 CreateDate 以生成 varchar 以格式化日期,如下所示:
SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate
FROM TableName ...
像这样使用 CONVERT 通常是为了使查询结果满足任何其他代码将要处理这些结果的要求。Style 126 是 ISO 8601 格式,一种适用于任何语言设置的国际标准。我不知道你的行业是什么,但这可能是故意的。你不想惹它。就像您报告的那样,这种样式 (126) 会以 '2013-04-29T18:15:20.270' 的形式生成日期的字符串表示形式!但是,如果以这种方式处理 CreateDate,那么您将无法让 bf1.DataFormatString 改为显示“29/04/2013”。您必须首先从原始 SQL 数据源中的 datetime 类型列开始,bf1 才能正确使用它。所以只需将其添加到数据源查询中,
SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate,
TableName.CreateDate AS CreateDate2
FROM TableName ...
然后,在您的代码中,您必须将 bf1 绑定到“CreateDate2”而不是原始的“CreateDate”,如下所示:
BoundField bf1 = new BoundField();
bf1.DataField = "CreateDate2";
bf1.DataFormatString = "{0:dd/MM/yyyy}";
bf1.HtmlEncode = false;
bf1.HeaderText = "Sample Header 2";
dv.Fields.Add(bf1);
瞧!您的日期现在应该显示“29/04/2013”!