When I am scrolling datagrid after selecting one row I am getting error as "An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll" on line : MyBase.Edit(source, rowNum, bounds, [readOnly], instantText, cellIsVisible)
Whole code is given below :
' Hosts a TextBox control in a cell of a DataGridColumnStyle for editing strings.
'
' Note:
' Adds the ability to change the color of an individual cell. As each row in the column is
' painted an event is fired that allows the setting of the new color.
' Added returning the cell value when it's being painted. Also if the row is selected the
' selection colors will be used.
'-----------------------------------------------------------------------------------------------'
' Additional namespaces.
Imports System.Windows.Forms
Imports System.Drawing
Public Class FormatableCellDataGridTextBoxColumn
' Base class.
Inherits DataGridTextBoxColumn
' Delegates.
Public Delegate Sub PaintingCellEventHandler( _
ByVal sender As Object, _
ByVal e As PaintingCellEventArgs)
Public Delegate Sub EditingCellEventHandler( _
ByVal sender As Object, _
ByVal e As EditingCellEventArgs)
' Events.
Public Event PaintingCell As PaintingCellEventHandler
Public Event EditingCell As EditingCellEventHandler
' Instance variables.
Private _columnNum As Integer
Public Sub New(ByVal columnNum As Integer)
' Initialize instance variables.
_columnNum = columnNum
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)
' Local variables.
Dim foreColor As Color
Dim backColor As Color
Dim rowIsSelected As Boolean = False
Dim text As String = NullText
Dim value As Object = GetColumnValueAtRow(source, rowNum)
Dim arg As PaintingCellEventArgs
' Determine if the row is selected.
If TypeOf foreBrush Is SolidBrush AndAlso TypeOf backBrush Is SolidBrush Then
foreColor = DirectCast(foreBrush, SolidBrush).Color
backColor = DirectCast(backBrush, SolidBrush).Color
If _
foreColor.Equals(DataGridTableStyle.SelectionForeColor) AndAlso _
backColor.Equals(DataGridTableStyle.SelectionBackColor) Then
rowIsSelected = True
End If
End If
' Retrieve brushes.
If Not IsDBNull(value) Then text = value.ToString()
arg = New PaintingCellEventArgs( _
rowNum, _
_columnNum, _
text, _
backBrush, _
foreBrush)
If Not rowIsSelected Then RaiseEvent PaintingCell(Me, arg)
' Paint the cell.
MyBase.Paint(g, bounds, source, rowNum, arg.BackBrush, arg.ForeBrush, alignToRight)
End Sub
Protected Overloads Overrides Sub Edit( _
ByVal source As System.Windows.Forms.CurrencyManager, _
ByVal rowNum As Integer, _
ByVal bounds As System.Drawing.Rectangle, _
ByVal [readOnly] As Boolean, _
ByVal instantText As String, _
ByVal cellIsVisible As Boolean)
' Local variables.
Dim editBoxIsToBeHidden As Boolean = False
Dim e As New EditingCellEventArgs(rowNum, _columnNum, editBoxIsToBeHidden)
' Retrieve edit instructions.
RaiseEvent EditingCell(Me, e)
' Allow the call to progress normally.
MyBase.Edit( _
source, _
rowNum, _
bounds, _
[readOnly], _
instantText, _
cellIsVisible)
' Hide the edit box.
If e.EditBoxIsToBeHidden Then
Me.HideEditBox()
End If
End Sub
End Class
Whole code is given below :
' Hosts a TextBox control in a cell of a DataGridColumnStyle for editing strings.
'
' Note:
' Adds the ability to change the color of an individual cell. As each row in the column is
' painted an event is fired that allows the setting of the new color.
' Added returning the cell value when it's being painted. Also if the row is selected the
' selection colors will be used.
'-----------------------------------------------------------------------------------------------'
' Additional namespaces.
Imports System.Windows.Forms
Imports System.Drawing
Public Class FormatableCellDataGridTextBoxColumn
' Base class.
Inherits DataGridTextBoxColumn
' Delegates.
Public Delegate Sub PaintingCellEventHandler( _
ByVal sender As Object, _
ByVal e As PaintingCellEventArgs)
Public Delegate Sub EditingCellEventHandler( _
ByVal sender As Object, _
ByVal e As EditingCellEventArgs)
' Events.
Public Event PaintingCell As PaintingCellEventHandler
Public Event EditingCell As EditingCellEventHandler
' Instance variables.
Private _columnNum As Integer
Public Sub New(ByVal columnNum As Integer)
' Initialize instance variables.
_columnNum = columnNum
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)
' Local variables.
Dim foreColor As Color
Dim backColor As Color
Dim rowIsSelected As Boolean = False
Dim text As String = NullText
Dim value As Object = GetColumnValueAtRow(source, rowNum)
Dim arg As PaintingCellEventArgs
' Determine if the row is selected.
If TypeOf foreBrush Is SolidBrush AndAlso TypeOf backBrush Is SolidBrush Then
foreColor = DirectCast(foreBrush, SolidBrush).Color
backColor = DirectCast(backBrush, SolidBrush).Color
If _
foreColor.Equals(DataGridTableStyle.SelectionForeColor) AndAlso _
backColor.Equals(DataGridTableStyle.SelectionBackColor) Then
rowIsSelected = True
End If
End If
' Retrieve brushes.
If Not IsDBNull(value) Then text = value.ToString()
arg = New PaintingCellEventArgs( _
rowNum, _
_columnNum, _
text, _
backBrush, _
foreBrush)
If Not rowIsSelected Then RaiseEvent PaintingCell(Me, arg)
' Paint the cell.
MyBase.Paint(g, bounds, source, rowNum, arg.BackBrush, arg.ForeBrush, alignToRight)
End Sub
Protected Overloads Overrides Sub Edit( _
ByVal source As System.Windows.Forms.CurrencyManager, _
ByVal rowNum As Integer, _
ByVal bounds As System.Drawing.Rectangle, _
ByVal [readOnly] As Boolean, _
ByVal instantText As String, _
ByVal cellIsVisible As Boolean)
' Local variables.
Dim editBoxIsToBeHidden As Boolean = False
Dim e As New EditingCellEventArgs(rowNum, _columnNum, editBoxIsToBeHidden)
' Retrieve edit instructions.
RaiseEvent EditingCell(Me, e)
' Allow the call to progress normally.
MyBase.Edit( _
source, _
rowNum, _
bounds, _
[readOnly], _
instantText, _
cellIsVisible)
' Hide the edit box.
If e.EditBoxIsToBeHidden Then
Me.HideEditBox()
End If
End Sub
End Class