Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
17.12.2013, 15:33
|
|||
---|---|---|---|
Обновление информации в ListView |
|||
#18+
Моя программа читает данные из XML файла и отображает их в ListView Другая программа, изменяет данные в этом файле. Добавляет или удаляет записи. Как мне организовать обновление информации в ListView? Сейчас я читаю файл каждые 5 секунд, и заново перезаливаю данные в ListView. Это неудобно для работы, интерфейс мерцает, выделение в ListView сбрасывается при перерисовке. Как лучше синхронизировать эту коллекцию в XML и мой ListView? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.12.2013, 17:25
|
|||
---|---|---|---|
|
|||
Обновление информации в ListView |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.12.2013, 00:44
|
|||
---|---|---|---|
Обновление информации в ListView |
|||
#18+
АлкобобёрКак мне организовать обновление информации в ListView? Сейчас я читаю файл каждые 5 секунд, и заново перезаливаю данные в ListView. Это неудобно для работы, интерфейс мерцает, выделение в ListView сбрасывается при перерисовке. Как лучше синхронизировать?.. Ясно дело, что это неудобно, некрасиво, а если данных будет несколько тысяч строк, то твоя конструкция еще и висеть будет. Я тебе дам идею (как я делаю) а ты уж решай. Я правда с mdb работаю, но суть та же. Есть таблица Table с много записей, кот. отображаются в ListView (это цивильней чем со всякими гридами и прочей мазней). При старте (или по Refresh) все записи естественно добавляются последовательно Listview.Items(i).Add Другая программа работает с Table (Add, Replace, Delete). Тебе никто не мешает сделать другую таблицу TableChange, и когда другая программа делает что-то с записью в Table, то пусть она параллельно логирует изменения в TableChange: action=Add; RecordID=2222 action=Replace; RecordID=333 action=Delete; RecordID=4566 Т.е. прога (которая с ListView) читает не 5000 строк в Table а 10 строк в TableChange. Да хоть раз в секунду таймер делай. Все что тебе надо сделать, это 1) Прочитать "записи об изменениях" в TableChange 2) прочитать эти изменения в основной таблице Table (ключи указаны) 3) отразить в LV эти изменения action=Add -> Listview.Items(2222).Add action=Replace -> Listview.Items(333)= action=Delete -> Listview.Items(4566).Remove 3) Удалить "записи об изменениях" в TableChange Прыгать, мерцать и вешаться ничего не будет. Недавно тесты делал: грубо 6000 записей в БД(mdb)/LV, 50 записей активных (т.е. те, данные кот. непрерывно меняются в тек. момент), таймер обновления LV на 1 сек, работает как часики и без спецэффектов. Правда делал это в VB6. Плюс LV заменил на чисто API (CreateWindowEx). 15016495 15058699 В .Net-овской LV-обертке еще свои "спецэффекты" могут быть, но они не должны быть сильно критичными. Но иногда "мелочи" могут очазаться совсем не мелочами при "больших нагрузках" (и дело далеко не в "красотах"). По крайней мере в VB6 я отказался от "Контрола" и написал свой API-класс из-за поганого эффекта контрола с постоянным прокручиванием на Selected запись, подробности в первой ссылке. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1403500]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 165ms |
0 / 0 |