Setting value of an item in a DataRow does not work

Serhat Ozgel picture Serhat Ozgel · Oct 15, 2008 · Viewed 18.7k times · Source

I am trying to convert all DateTime values in a DataTable to strings. Here is the method I use:

private static void ConvertDateTimesToStrings(DataTable dataTable)
{
    if (dataTable == null)
    {
        return;
    }

    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++ )
    {
        for (int i = 0; i < dataTable.Columns.Count; i++)
        {
            DateTime dateTime;
            try
            {
                dateTime = (DateTime)dataTable.Rows[rowIndex][i];
            }
            catch (InvalidCastException)
            {
                continue;
            }
            dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");
        }
    }
}

After this line works:

dataTable.Rows[rowIndex][i] = dateTime.ToString("dd.MM.yyyy hh:mm:ss");

I check the value of dataTable.Rows[rowIndex][i] and see it is still a DateTime, not a string. Why does this happen and how can I solve this?

Edit: I am trying to do this because I am fighting an api and unfortunately I do not have the choice of which component to use.

Answer

Biri picture Biri · Oct 15, 2008

This simply won't work, because you haven't changed the underlaying data type.

You have a DataTable, with a column which has data type DateTime.

You can assign a String to it, but it will convert back to DateTime.

Why do you want to change it to a formatted string? Can't you format only when you need to display it, and handle as a DateTime until you have to display it?

Update: it is also better if you check the column's type before you try to convert, it can be much faster:

if (dataTable.Columns[0].DataType == typeof(DateTime))
{
}