我会尽可能清楚地解释我的情况。
我有一个DataTable,其中包含几个稍后会生成报告的数据。其中一列是DateTime类型。问题是当报告显示日期时,它们以长格式“10/14/1996 12:00:00 AM”显示,并且需要以格式显示 “DD-MMM-YYYY”。
我已尝试过几项方法将dataTable中的值更改为所需的格式。 我试过这个:
for (int i = 0; i < dt.Rows.Count; i++)
{
DateTime cellValueDateOfBirth=Convert.ToDateTime(dt.Rows[i][indexDateOfBirth]);
string formattedDateOfBirth = cellValueDateOfBirth.ToString("DD-MMM-YYYY");
dt.Rows[i].SetField(indexDateOfBirth, formattedDateOfBirth);
dt.Rows[i].ItemArray.SetValue(formattedDateOfBirth, indexDateOfBirth);
}
哪个不起作用,因为当我调试时,我看到了
的值string test = dt.Rows[i].ItemArray[indexDateOfBirth].ToString();
没有像我预期的那样设置为formattedDateOfBirth的值。报告仍然使用未格式化的日期生成。
我已经尝试了几种方法来改变那个日期的价值,但没有成功。
我真的不关心所有的dateTime数据,所以我认为这是一个好主意(如果不能简单地改变日期列的值)来创建一个包含所有数据的数组格式化的值,然后找到一种方法来删除具有未格式化日期的列,并使用格式化日期创建的新数组替换它(如果可能的话,在其原始位置)。 我已经创建了数组,但不知道如何用数组中的值替换列值。这是我到目前为止所做的:
string[] FormattedDatesOfBirth = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
DateTime cellValueDateOfBirth=Convert.ToDateTime(dt.Rows[i][indexDateOfBirth]);
string formattedDateOfBirth = cellValueDateOfBirth.ToString(EMR.HelperClasses.Core.chsDateFormat);
FormattedDatesOfBirth[i] = formattedDateOfBirth;
}
//then here I would create a column with the data in FormattedDatesOfBirth[]
其他一些想法是复制DataTable,但不复制未格式化的列,而是添加格式化值的数组。
你认为这是可能的吗?还有另一种方法吗?也许我试图以错误的方式改变价值观......
我真的不确定是否还有其他更好的解决方案,我很乐意听取您的所有建议,我对此没有想法。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以查看C# how to change data in DataTable?中的帖子,看看它们是否适用于您?特别是https://stackoverflow.com/a/9998257/1520364
你不能只使用ToShortDateString函数直接输出DateTime
对象吗?或者使用ToString的这种重载来提供您想要的格式,类似于Brian建议的那样。