У меня есть DataRow, например {"Foo", "Bar"} в соответствующем DataTable с 2 строковыми столбцами. Я хочу, чтобы скопировал эту строку в новый DataTable, который имеет строковые столбцы, 0-е из которых является новым значением, которое я хочу передать. Таким образом, результирующая строка должна выглядеть как {«Мой», «Foo», «Bar»}.DataRow Скопировать значения из другого DataRow с дополнительным столбцом
Промыть, повторите. Другая операция копирования будет выглядеть как {«Боб», «Смит»} => {«Мой», «Боб», «Смит»}.
Я попытался использовать DataRow.ItemArray в массиве Array.Copy() и myDataRow.ItemArray.CopyTo (otherDataRow.ItemArray). Затем я прочитал, что это не сработает, потому что ItemArray имеет вид Read-Only, несмотря на то, что intellisense говорит вам об обратном.
И, конечно, я могу написать свой собственный цикл, чтобы скопировать значения по столбцам, но .. Почему это не встроено в библиотеки или что-то в этом роде?
Пример кода:
DataTable dtDestination = new DataTable();
DataTable dtSource = new DataTable();
dtSource.Columns.Add("Str1");
dtSource.Columns.Add("Str2");
dtDestination.Columns.Add("Str0");
dtDestination.Columns.Add("Str1");
dtDestination.Columns.Add("Str2");
dtSource.Rows.Add("Foo", "Bar");
dtSource.Rows.Add("Bob", "Smith");
foreach (DataRow drSrc in dtSource.Rows)
{
DataRow drNew = dtDestination.NewRow();
drNew["Str0"] = "My";
//this doesn't work
Array.Copy(drSrc.ItemArray, 0, drNew.ItemArray, 1, drSrc.ItemArray.Length);
//this doesn't work either
drSrc.ItemArray.CopyTo(drNew.ItemArray, 1);
//I want to add the "new row" to my destination table,
//*WITH* the contents from the source-row plus the "My" value in the 0th column!
dtDestination.Rows.Add(drNew);
}
Что случилось перебор? 'drNew [1] = drSrc [0]; drNew [2] = drSrc [1] ' – Zer0
Это моя точка ... Я легко могу сделать это с помощью цикла, отлично. Я спрашиваю, почему это не то, что встраивается в рамки, или, по крайней мере, в какую-то библиотеку, на которую можно просто позвонить. – NateJ
Потому что его прямо вперед и легко сделать. Будет работать лучше, чем копирование массива, например. – Zer0