2016-02-15 9 views
0

Я пытаюсь добавить новый столбец к уже существующему DataTable с помощью C#.Скопируйте DataRow с дополнительным столбцом

Лучшее, что я мог сделать, это на самом деле копировать каждый DataRow, как объяснено в here и here, но не имели успеха, так как ответы на эти вопросы определенно сказать, что оба DataTable должны иметь одинаковые столбцы. Всякий раз, когда я пытаюсь добавить любые значения в новый столбец (который находится в конце нового DataTable по имени dt Я оставил с DataTable с тем же числом строк, но нет значения вообще.

foreach (DataRow dr in ret.Rows) 
{ 
    dt.Rows.Add(dr.ItemArray, "1"); 
} 

ret является DataTable с X столбцов и N строк

dt является DataTable с X + 1 столбцов и N строк

ответ

1

Это должно работать по желанию:..

foreach (DataRow dr in ret.Rows) 
{ 
    DataRow row = dt.Rows.Add(); 
    for (int i = 0; i < dr.ItemArray.Length; i++) 
     row.SetField(i, dr.ItemArray[i]); 
    row.SetField(dt.Columns.Count - 1, "1"); 
} 

Другой подход состоит в назначении DefaultValue до последнего столбца, так как вы используете всегда один и тот же постоянное значение:

dt.Columns[dt.Columns.Count - 1].DefaultValue = "1"; 

Теперь вам не нужно, чтобы обеспечить это значение. Вы можете использовать DataTable.Merge:

dt.Merge(ret); 
+0

yep. Так оно и было. Я немного беспокоюсь о производительности, которую я мог бы получить, но она работает. Благодаря! –

+0

@MiquelColl: производительность не является проблемой. Все методы .NET, такие как 'DataTable.ImportRow', используют аналогичные циклы, но с дополнительными накладными расходами. –

+0

@MiquelColl: но была ошибка, я использовал 'dr.SetField' вместо' row.SetField'. Я также предложил другой подход. –