Подвисает DataGridView. Как лечить?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

alexvb2
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 14.01.2011 (Пт) 13:02

Подвисает DataGridView. Как лечить?

Сообщение alexvb2 » 14.01.2011 (Пт) 13:05

На форме поставил DataGridView и запихнул туда 2000 записей, после чего скролинг притормаживает (плывет с задежкой). Как лечится такой недуг? :oops:

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Подвисает DataGridView. Как лечить?

Сообщение Joo » 14.01.2011 (Пт) 16:26

Как вариант использовать виртуальный режим.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

alexvb2
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 14.01.2011 (Пт) 13:02

Re: Подвисает DataGridView. Как лечить?

Сообщение alexvb2 » 14.01.2011 (Пт) 20:00

Плиз подробнее. Как это виртуальный режим? :oops:

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Подвисает DataGridView. Как лечить?

Сообщение Денис » 17.01.2011 (Пн) 9:43

Я сам не до конца понимаю смысл виртуального режима, посему прошу поправить меня, если в чем-то заблуждаюсь: Не пихать все записи в DataGridView, а оставить их в RecordSet. В DataGridView же грузить только те записи, которые умещаются на его видимой части, а при прокрутке подгружать новые/выгружать старые.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Подвисает DataGridView. Как лечить?

Сообщение Joo » 17.01.2011 (Пн) 11:47

Денис писал(а):Не пихать все записи в DataGridView, а оставить их в RecordSet

Все верно.
Код: Выделить всё
    Dim Data As New Dictionary(Of String, String)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DataGridView1.VirtualMode = True
        For i As Integer = Asc("A") To Asc("Z") : DataGridView1.Columns.Add(Chr(i), Chr(i)) : Next
        DataGridView1.RowCount = Int16.MaxValue
    End Sub
    Private Sub DataGridView1_CellValueNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) Handles DataGridView1.CellValueNeeded
        Dim key As String = e.ColumnIndex & e.RowIndex
        If Data.ContainsKey(key) Then e.Value = Data(key)
    End Sub
    Private Sub DataGridView1_CellValuePushed(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) Handles DataGridView1.CellValuePushed
        Dim key As String = e.ColumnIndex & e.RowIndex
        If Data.ContainsKey(key) Then Data(key) = e.Value Else Data.Add(key, e.Value)
    End Sub
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList