Visual C++ MFC - CListCtrl -> обновление отображаемых дан
Добавлено: Пн май 15, 2006 0:00
Тема посвящается решению проблемы обновления CListCtrl (или ListView в .NET, содержащего большие объемы данных (например - отображающему 10 тысяч записей), получаемых из базы данных или откуда либо еще. Я думаю, тема будет интересна как .NET девелоперам, так и тем, кому ближе MFC.
В моей конкретной ситуации трабл такой:
Есть клиент на C++ под MFC, MySql server 3.53. В клиенте записи базы отображаются в CListCtrl (допустим, список сотрудников. внешний вид - список в 1С Бух. или проч.), содержимое берется из CRecordset каждые 30 секунд (используется только для отображения записей, ака Explorer
.
Проблему перерисовки, скроллинга и сохранения состояния листа я решил, полосу выделения до краев списка (дальше последнего хидера) нарисовал. Теперь нужно быстро и путево обновлять.
Т.К. выкачивать каждые полминуты все записи запросом - не вариант, нужно определять состояние конкретной таблицы на сервере, чтобы вытащить только изменения, а потом - отобразить эти изменения в CListCtrl. Тупой код типа {lstSotr.DeleteAllItems();
//... обновление листа с нуля } не катит явно.
Если у кого есть предложения - плиз хелп. Сам прорабатываю варианты, но пока нет желания писать Листу AI
. Кажется, есть простой и более правильный выход...[/b]
В моей конкретной ситуации трабл такой:
Есть клиент на C++ под MFC, MySql server 3.53. В клиенте записи базы отображаются в CListCtrl (допустим, список сотрудников. внешний вид - список в 1С Бух. или проч.), содержимое берется из CRecordset каждые 30 секунд (используется только для отображения записей, ака Explorer

Проблему перерисовки, скроллинга и сохранения состояния листа я решил, полосу выделения до краев списка (дальше последнего хидера) нарисовал. Теперь нужно быстро и путево обновлять.
Т.К. выкачивать каждые полминуты все записи запросом - не вариант, нужно определять состояние конкретной таблицы на сервере, чтобы вытащить только изменения, а потом - отобразить эти изменения в CListCtrl. Тупой код типа {lstSotr.DeleteAllItems();
//... обновление листа с нуля } не катит явно.
Если у кого есть предложения - плиз хелп. Сам прорабатываю варианты, но пока нет желания писать Листу AI
