Completed
Last Updated: 19 Oct 2015 08:05 by ADMIN
ADMIN
Dess | Tech Support Engineer, Sr.
Created on: 18 Jul 2014 13:11
Category: GridView
Type: Bug Report
1
FIX. RadGridView - the CellValidating event is fired twice when the AddNewRowPosition is Bottom
To reproduce: 
1. Add a RadGridView and bind it to Northwind.Products table.
2. Use the following code:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products)
     For Each col As GridViewColumn In Me.RadGridView1.Columns
         If Not col.HeaderText = "SupplierID" AndAlso Not col.HeaderText = "ProductID" Then
             col.ReadOnly = True
         End If
     Next
     Me.RadGridView1.AddNewRowPosition = SystemRowPosition.Bottom
 End Sub

 Private Sub RadGridView1_CellValidating(sender As Object, e As CellValidatingEventArgs) Handles RadGridView1.CellValidating
     If e.Value Is Nothing Then
         If MessageBox.Show("Incorrect", "error", MessageBoxButtons.OKCancel) = Windows.Forms.DialogResult.OK Then
             e.Cancel = True
         End If
     End If
 End Sub

3. Run the project and go to the new row ,cell "SupplierID".
4. Clear the value and press Tab key. As a result the message box for error indication is shown twice.

Workaround:
'register the custom row  behavior
Dim gridBehavior As BaseGridBehavior = TryCast(RadGridView1.GridBehavior, BaseGridBehavior)
gridBehavior.UnregisterBehavior(GetType(GridViewNewRowInfo))
gridBehavior.RegisterBehavior(GetType(GridViewNewRowInfo), New MyNewRowBehavior())

Me.RadGridView1.GridViewElement.Navigator = New MyGridNavigator()


Public Class MyNewRowBehavior
Inherits GridNewRowBehavior
    Protected Overrides Function ProcessTabKey(keys As KeyEventArgs) As Boolean
        If Me.GridControl.AddNewRowPosition = SystemRowPosition.Bottom AndAlso _
        Me.GridControl.IsInEditMode AndAlso Me.GridViewElement.Navigator.IsLastColumn(GridViewElement.CurrentColumn) Then
            Me.GridControl.Tag = "SuspendValidation"
        End If
        Return MyBase.ProcessTabKey(keys)
    End Function
End Class

Public Class MyGridNavigator
Inherits BaseGridNavigator
    Public Overrides Function SelectFirstColumn() As Boolean
        If Me.GridViewElement.GridControl.Tag = "SuspendValidation" Then
            Me.GridViewElement.GridControl.Tag = Nothing
            Return False
        End If
        Return MyBase.SelectFirstColumn()
    End Function
End Class
0 comments