У меня странная ситуация получилась:
Есть база данных. Через 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)
Что странно, что в их примере даже намека на тормоза нет, а у меня почемуто начинает тормозить и жрет весь процессор...
Помогите ПЛЗ!