2010-09-20 8 views
1

У меня есть две зеркальные DataTables (одинаковую структуру с двумя первичными ключами):Удалить запись из DataTable, когда запись исчезает из зеркального DataTable

  • DataTable_A ---> привязан к DataGridView
  • DataTable_B - -> заполнено из базы данных

Поскольку DataTable_B заполняется запросом в базу данных каждые 2 секунды, мне нужно зеркалировать DataTable_A как DataTable_B, избегая непосредственно заполнения DataTable_A. Когда запись исчезает из DataTable_B, мне нужно также удалить запись из DataTable_A. Каков наилучший способ сделать это?

Прямо сейчас я делаю «цикл» для каждой строки DataTable_B, и если строка не существует в DataTable_A, я ее удаляю.

Есть ли лучший способ сделать это?

+0

Почему вы зеркалируете таблицы данных? Кроме того, как вы в настоящее время заполняете каждый DataTable? Вы полностью обновляете DataTable_B из базы данных каждые 2 секунды или просто сбрасываете изменения? –

+0

В основном мне нужно отразить таблицу из базы данных в datatable, а затем в datagridView, ставка, которую я хочу сделать, без каких-либо проблем с пользовательским интерфейсом. Каждые две секунды я делаю заполнение DataTable_B запросом базы данных. – aleroot

ответ

2

Лучшим способом может быть не иметь TableA вообще, а использовать DataView на TableB. Это решило бы все проблемы сразу. Можете ли вы уточнить, почему вам нужна копия?

Но иначе вы хотели бы, чтобы справиться с RowChanged и TableNewRow RowDeleted событие TableB


Более общая идея, после просмотра комментариев: Если можно добавить столбец Timestamp к столу в базе данных вы можете запускать гораздо более эффективный запрос. И метод DataTable.Merge сделает все остальное.

+0

Моя цель отражает ситуацию в таблице базы данных на datagridView. Например, у меня есть этот запрос: SELECT field1, field2, field3, field4 FROM table1 WHERE date = '2010-09-20'; Мне нужно проверить почти в реальном времени, если строка в базе данных изменится и отразить ситуации в DatagridView: например, если строка в базе данных удалена, мне также нужно удалить ее также в datagridView. Pratically datagridView - это моментальный снимок в реальном времени данных в таблице базы данных. – aleroot

+0

И сохранить «стабильный» вид в сетке? Это может быть возможно с помощью прямого связывания, если количество записей не слишком велико. В противном случае используйте события. –

+0

Записывается в среднем 1500. Но заполняя Datatable dataadapter на таблице B каждые две секунды, могу ли я получить действительно событие RowDeleted? У меня есть поле в каждом datatable, которое содержит время: HH: MM и поле данных в этом формате: yyyy-MM-dd. – aleroot

Смежные вопросы