1

我会尽可能清楚地解释我的情况。

我有一个包含多个数据的 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,但不复制未格式化的列,而是添加格式化值的数组。

你认为这可能吗?还有另一种方法可以做到这一点吗?也许我尝试以错误的方式更改值...

我真的不确定是否还有其他更好的解决方案,我很乐意听到您的所有建议,我对此一无所知。任何帮助将不胜感激。

4

1 回答 1

0

您可以查看 C# 中的帖子如何更改 DataTable 中的数据吗?看看它们中的任何一个是否适用于你?特别是https://stackoverflow.com/a/9998257/1520364

你不能只使用ToShortDateString函数来直接输出DateTime你想要的对象吗?或者,使用ToString的这种重载来提供您想要的格式,类似于 Brian 建议的。

于 2013-01-10T03:33:25.290 回答