Как обновить ADO.NET DataRow в DataTable с другой DataRow? - PullRequest
0 голосов
/ 09 января 2012

Я хочу сделать это:

    public void UpdateDataRowsToDataTable(string tableName, List<DataRow> rows)
    {
        foreach (DataRow row in rows)
        {
            // this method does not exist!!
            _dataSet.Tables[tableName].Rows.Update(row);
        }
    }

Мне нужен метод, который находит строку (возможно, по первичному ключу) и обновляет измененные строки в строку в DataTable.

Единственная известная мне возможность - использовать Select (или Find), а затем, возможно, перебрать все столбцы и присвоить им новые значения.Пожалуйста, скажите мне, что это не может быть правдой!

Ответы [ 5 ]

3 голосов
/ 09 января 2012

Хотя вопрос не совсем понятен, похоже, что у вас есть группа строк из одной таблицы и вы хотите обновить эквивалентные строки в другой таблице данных.Если это так, вы можете просто использовать метод find и вручную обновить их, как вы предлагали, или, альтернативно, добавить новые строки в другую таблицу и объединить их (есть разные варианты объединения двух таблиц данных).Однако слияние будет выполнять то же самое под капотом (т. Е. Найти по первичному ключу и обновить столбцы).

Другим способом было бы просто заменить строку и установить ее статус измененной datarow.SetModified()

1 голос
/ 09 января 2012

Или вы можете удалить старый и добавить новый ...

0 голосов
/ 07 февраля 2013

Другой вариант - использовать свойство ItemArray для обновления экземпляра DataRow .Единственное, что вам еще нужно выбрать правильные строки.Также обратите внимание, что вам нужно изменить весь массив ItemArray вместо его элементов, чтобы модификация была отражена в DataTable .

foreach (DataRow row in rows)
{
   // Select the row
   var rows = _dataSet.Tables[tableName].Select(string.Format("Table_ID = {0}", row["Table_ID"]));

   // Update the row
   if (0 < rows.Length)
       rows[0].ItemArray = (object[])row.ItemArray.Clone();
}

Независимо от способа обновленияDataRow, вы можете поместить все это в метод расширения.

0 голосов
/ 09 января 2012

Если вы используете dataAdapter ...

foreach (DataRow row in rows)
{
    Row.BeginEdit();        
    //Do your stuff        
    Row.EndEdit();
}
dataAdapter.Update(_dataSet, "yourTable");
0 голосов
/ 09 января 2012

Не могли бы вы использовать бокс для этого, если ваши таблицы данных совпадают.

 DestDataset.DestDataTable newChildRecords = 
 (DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...