Copy C# DataTable and convert all values to string

Alex A. picture Alex A. · Apr 9, 2014 · Viewed 22k times · Source

I have a DataTable with columns of different types. What I want is a DataTable that has the same column names but all values are strings. That is, if this is the first:

Name   Age
-----------
John   31
Alice  27
Marge  45

where Name is a String column and Age is an Int32 column, what I want is:

Name   Age
-----------
John   31
Alice  27
Marge  45

where Name and Age are both string columns. The output table must contain the same values as the input table but every value must be converted to a string. Can anyone provide any insight on how one might go about doing this? I thought about maybe doing something like

foreach (DataColumn col in inputTable.Columns)
{
    outputTable.Columns.Add(col.ColumnName, typeof(string));

    foreach (DataRow row in inputTable.Rows)
    {
        ...??
    }
}

Or perhaps there is a better or more efficient approach? Any guidance would be greatly appreciated.

Answer

Habib picture Habib · Apr 9, 2014

You can't modify a column type in DataTable if already has records. You can Clone DataTable and then modify column type in each column of cloned table. Later you can import rows.

DataTable dtClone = dt.Clone(); //just copy structure, no data
for (int i = 0; i < dtClone.Columns.Count; i++)
{
    if (dtClone.Columns[i].DataType != typeof(string))
        dtClone.Columns[i].DataType = typeof(string);
}

foreach (DataRow dr in dt.Rows)
{
    dtClone.ImportRow(dr);
}

dtClone will have every column as of string and all the data from original table dt