DataGridView в реальном времени отображения данных в виртуальном режиме - PullRequest
2 голосов
/ 27 апреля 2010

У меня есть DataGridView, который будет отображать записи (записи журнала) из базы данных. Количество записей, которые могут существовать одновременно, очень велико. Я хотел бы использовать функцию виртуального режима DataGridView для отображения страницы данных и для минимизации объема данных, которые должны быть переданы по сети в данный момент времени.

Опрос для данных не может быть и речи. Будет одновременно запущено несколько клиентов, каждый из которых находится в одной сети и просматривает записи. Если все они опрашивают данные, сеть будет работать очень медленно.

Данные доступны только для чтения пользователю; они не смогут редактировать что-либо из этого, просто просмотрите его. Мне нужно знать, когда обновления происходят в базе данных, и мне нужно обновлять экран с этими обновлениями соответственно в виртуальном режиме. Если страница данных, которую просматривает пользователь, содержит данные, которые изменились, он / она увидит эти обновления на этой странице. Если обновления были внесены в данные в базе данных, но не в данные, которые просматривает пользователь, то на экране пользователя ничего не изменится (возможно, просто полоса прокрутки, если записи были добавлены или удалены).

Мой нынешний подход заключается в использовании отслеживания изменений SQL-сервера с каркасом синхронизации. У каждого клиента есть локальный экземпляр SQL Server CE и файл базы данных, которые синхронизируются с основным сервером базы данных. Я использую информацию из события синхронизации, чтобы увидеть, были ли внесены какие-либо изменения в основную базу данных и синхронизированы ли они с клиентом. Мне нужно использовать здесь виртуальный режим DataGridView, потому что у меня не может быть одновременно загружено тысячи записей в DataGridView, в противном случае использование памяти идет вверх.

Основной проблемой сейчас является знание того, как использовать виртуальный режим для обеспечения беспрепятственного взаимодействия с пользователем, позволяя им прокручивать записи вверх и вниз, а также обновлять записи на лету, не мешая пользователю ненадлежащим образом. Кто-нибудь имел дело с этой проблемой раньше, и если да, где я могу увидеть, как они это сделали? Я просмотрел некоторые документы MSDN и примеры по виртуальному режиму. До сих пор я не нашел документации и / или примеров на их сайте, где объясняется, как делать то, что я пытаюсь выполнить.

1 Ответ

2 голосов
/ 25 августа 2010

Добавить следующее для запуска формы

 dataGridView1.CellValueNeeded +=new DataGridViewCellValueEventHandler( dataGridView1_CellValueNeeded );  
    dataGridView1.VirtualMode = true;

Используйте следующий код для получения обновления

dataGridView1.RowCount = (int)rowscount.TotalCount;

Добавить следующую функцию:

private void dataGridView1_CellValueNeeded( object sender, DataGridViewCellValueEventArgs e )
            {
                _cache.LoadPage( e.RowIndex );    
                int rowIndex = e.RowIndex % PageSize;    
                e.Value = datatable.rows[rowIndex][e.ColumnIndex];
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...