2010-02-16 4 views
1

Я использую datagridview в приложении Windows, разработанном на C# VS2005 .net 2.0.DataGridview repaint очень медленно

Datagridview предоставлен список бизнес-объектов. Это займет раздражающую задержку в 2-3 секунды, прежде чем начинать отображать строки в datagridview в режиме падающего занавеса. Когда я переключусь обратно в свое приложение из любого другого окна, он начнет процесс перерисовки в том же стиле занавески. Это довольно раздражает. Plz, помогите мне разобраться!

+0

Вы можете сократить код до минимума, который повторяет проблемы и пост это или просто разместить то, что вы считаете соответствующими разделами. – ChrisF

+0

Наиболее вероятным объяснением является то, что вы возвращаетесь к источнику данных, чтобы повторно заполнить сетку каждый раз, когда вы перерисовываете сетку. – ChrisF

+1

Сколько строк вы вкладывали в эту сетку? –

ответ

0

У меня такая же проблема. GridView не привязан к источнику данных. Я сам строю GridView. Я получаю тот же эффект падающего занавеса, когда меняю размер (увеличить) или прокручиваю вертикально. Это очень плохо. Эффект тот же, если у меня есть 100 или 100000 строк. Это тоже то же самое, если у меня есть DoubleBuffered, установленный в true или false.

Я искал в сети какие-либо подсказки относительно того, что может происходить, и пока ничего. Слишком плохо, что парень, который начал эту тему, не следил, иначе у нас может быть ответ.

1

Я не знаю, почему это работает, но установка элемента управления DataGridView на двойные буферизированные работы является абсолютным удовольствием. Убедитесь, что свойство DoubleBuffered в форме хоста также неверно.

После этого мое управление сеткой прошло так медленно (независимо от объема данных), что вы могли почти подсчитывать ячейки, когда они вошли, - чтобы перерисовывать так же быстро, как и любой другой элемент управления.

Свойство DoubleBuffered защищен от DataGridView, так что вам нужно будет создать производный класс и установить свойство есть, например:

class DoubleBufferDataGrid : DataGridView 
{ 
    public DoubleBufferDataGrid() 
     : base() 
    { 
     this.DoubleBuffered = true; 
    } 
}