Удалить строку из общих данных в C # - PullRequest
1 голос
/ 17 декабря 2010

Я столкнулся с проблемой при попытке удалить строку из таблицы данных в C #.Проблема в том, что таблица данных построена из SQL, поэтому она может иметь любое количество столбцов и может иметь или не иметь первичный ключ.Поэтому я не могу удалить строку, основанную на значении в определенном столбце или на первичном ключе.

Вот основная схема того, что я делаю:

//Set up a new datatable that is an exact copy of the datatable from the SQL table.  
newData = data.Copy();
//...(do other things)
foreach (DataRow dr in data.Rows)
{
  //...(do other things)
  // Check if the row is already in a data copy log.  If so, we don't want it in the new datatable.
  if (_DataCopyLogMaintenance.ContainedInDataCopyLog(dr))
  {
    newData.Rows.Remove(dr);
  }
}

Но, что дает мне сообщение об ошибке: «Данный DataRow отсутствует в текущем DataRowCollection».Что не имеет никакого смысла, учитывая, что newData является прямой копией данных.У кого-нибудь еще есть предложения?Сайт MSDN не сильно помог.

Спасибо!

1 Ответ

4 голосов
/ 17 декабря 2010

Ваш foreach должен быть в копии, а не в оригинальном наборе. Вы не можете удалить объект, содержащийся в collection1, из collection2.

foreach (DataRow dr in newData.Rows)

В противном случае вы можете использовать счетчик для удаления по индексу. Как то так:

for(int i = 0; i < data.Rows.Count; i++)
{
  if (_DataCopyLogMaintenance.ContainedInDataCopyLog(data.Rows[i]))
  {
    newData.Rows.RemoveAt(i);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...