我需要在gridview中格式化datetime以显示日期。我不能在从sql中提取期间更改单个列的格式,因为代码使用.net生成的SqlDataAdapter.Fill。我在其他stackoverflow问题上阅读了如何更改绑定字段中的日期格式,而其他答案则要求使用类似gridview的某些内容。如果我尝试只输入并使用它,那么intellisense没有找到并且毫不奇怪地给我一个无定义编译错误的格式。我不能简单地改变aaspx中的属性,因为它是一个以编程方式生成的gridview。
有没有办法枚举gridview中的列并检查列是否已经是日期时间类型(它们将作为日期时间从sql进入,排序已经正常工作,因此它们不会以字符串形式出现)并将那些格式更改为刚才的日期?目前,当我尝试对列进行枚举时,它会跳过,因为在数据绑定期间gridview中的列数仍然是0。或者是否有人有一个更便宜的想法,这些是成千上万的行进来如果我可以为日期时间信息格式化列或整个gridview,可能会好得多。谢谢
编辑:我把它放在gridview_RowDataBound 中找到了一种方法 foreach (DataControlFieldCell cell in e.Row.Cells)
{
AutoGeneratedField field = cell.ContainingField as AutoGeneratedField;
if (field != null && field.DataType == typeof(DateTime))
cell.Text = DateTime.Parse(cell.Text).ToShortDateString();
}
答案 0 :(得分:0)
即使SQL由数据适配器执行,您也可以使用Convert函数修改Select命令中的代码,以转换字符串中的datetime字段。 像
这样的东西SELECT field1, field2,..., fieldN, convert(varchar, getdate(), 103) as mydate
或者,如果不能以任何方式修改SELECT,您可以动态地向数据表添加一个字段,并将日期以字符串格式放在该字段上(但这很耗时)并且只有在您可以隐藏gridview列,以便仅显示格式化为一的字符串。
我认为更好的是更改选择,或者更好,如果您需要对数据的特定视图,只需使用您需要的数据创建正确的SQL查询,使用DataReader调用它并创建要使用的数据表作为gridview的源代码,并将标准select命令保留为更具体的用途。 HTH