Скопируйте C# DataTable и преобразуйте все значения в строку
У меня есть DataTable
с колонками разных типов. Что я хочу это DataTable
с одинаковыми именами столбцов, но все значения являются строками. То есть если это первое:
Name Age
-----------
John 31
Alice 27
Marge 45
где имя является String
столбец и возраст Int32
колонка, что я хочу это:
Name Age
-----------
John 31
Alice 27
Marge 45
где Имя и Возраст оба являются строковыми столбцами. Выходная таблица должна содержать те же значения, что и входная таблица, но каждое значение должно быть преобразовано в строку. Может ли кто-нибудь дать представление о том, как можно это сделать? Я думал о том, чтобы сделать что-то вроде
foreach (DataColumn col in inputTable.Columns)
{
outputTable.Columns.Add(col.ColumnName, typeof(string));
foreach (DataRow row in inputTable.Rows)
{
...??
}
}
Или, может быть, есть лучший или более эффективный подход? Любое руководство будет с благодарностью.
3 ответа
Вы не можете изменить тип столбца в DataTable
если уже есть записи. Вы можете Clone
DataTable, а затем изменить тип столбца в каждом столбце клонированной таблицы. Позже вы можете импортировать строки.
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
будет иметь каждый столбец со строкой и все данные из исходной таблицы dt
Вы можете использовать встроенный метод toString().
foreach (DataColumn col in inputTable.Columns)
{
outputTable.Columns.Add(col.ColumnName, typeof(string));
foreach (DataRow row in inputTable.Rows)
{
outputTable.Columns.Add(row.toString());
}
}
В этом коде вы можете преобразовать весь набор данных в одну строку.
string ConvertDatasetToString(DataSet Ds)
{
string OUT = "";
for (int t = 0; t < Ds.Tables.Count; t++)
{
for (int r = 0; r < Ds.Tables[t].Rows.Count; r++)
{
for (int c = 0; c < Ds.Tables[t].Columns.Count; c++)
{
string s = Ds.Tables[t].Rows[r][c].ToString();
OUT += s;
}
}
}
return OUT;
}
если вы хотите преобразовать один объект данных в одну строку, вы можете опустить первый for