在c#中改变DataTable的方法?

时间:2013-01-10 03:28:22

标签: c# datetime datatable formatting

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

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

你认为这是可能的吗?还有另一种方法吗?也许我试图以错误的方式改变价值观......

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

1 个答案:

答案 0 :(得分:0)

您可以查看C# how to change data in DataTable?中的帖子,看看它们是否适用于您?特别是https://stackoverflow.com/a/9998257/1520364

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