Покрасим DataGrid. А почему тормозит?

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

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

melco
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.02.2005 (Пн) 22:43

Покрасим DataGrid. А почему тормозит?

Сообщение melco » 29.03.2005 (Вт) 11:10

Уважаемые форумчане!
У меня странная ситуация получилась:
Есть база данных. Через MyODBC всё прекрасно связал, сделал Fill dataset'а .
Это исходная позиция.
Потом стоит задача при заполнении DataGrid менять цвет строки в ней в зависимости от значения 15 параметра в DataTable для этой строки.
Тоесть допустим если он > 0 то строка красная, если меньше - белая.
Тут всё просто. Скачал примерчик. Они там генерируют сначала DataTable, потом добавляют ее в DataSet. Потом для создают стиль на основе файла.vb Там есть
Код: Выделить всё
Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)

Вот они ей и пользуются. Пример я прикреплю и свой и тот, по образцу которого я делал.
Дело в том, что когда я подствляю свой DataSet в место ихнего и заменяю поля DataGrid'а своими, то всё начинает тормозить (тоесть ДатаГрид заполняется медленно, когда сортируеш или расширяеш поля, оно тоже тормозит на прорисовке).
Вот кусок того .vb, который отвечает за прорисовку

Код: Выделить всё

Public Class colorcell
    Inherits DataGridTextBoxColumn
    Public Sub New()
        'Constructor for the Derived class
        MyBase.New()
        'Boolean Argument , Indicating the Column is editable or not
    End Sub

    Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
        Try
            Dim drv As DataRowView
            Dim dv As DataView = CType(source.List, DataView)
            'Get the DataRowView of the row being painted.
            drv = CType(dv.Item(rowNum), DataRowView)
            'Used column of the DataRowView to determine the formatting of the
            'column this object is painting.
            If drv(15) > 0 Then
                ' Here is where we are going to do the actual painting.
                backBrush = Brushes.Yellow
                foreBrush = Brushes.Red
            End If
        Catch ex As Exception
        Finally
            MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
        End Try

    End Sub

End Class


Тормоза появляются, если раскоментировать обявление
Код: Выделить всё

            Dim drv As DataRowView
            Dim dv As DataView = CType(source.List, DataView)
            'Get the DataRowView of the row being painted.
            drv = CType(dv.Item(rowNum), DataRowView)


Что странно, что в их примере даже намека на тормоза нет, а у меня почемуто начинает тормозить и жрет весь процессор...

Помогите ПЛЗ!
Вложения
Modified_ColoredDataGrid.zip
Это тот пример, по которому я делал
(32.91 Кб) Скачиваний: 68
my.rar
Это мой project
(113.9 Кб) Скачиваний: 66
Unix, Cisco, Nortel Passport, Perl, Programming

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

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

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

    TopList