El problema surge al cambiar la fuente de datos, lo que puedes hacer es eliminar momentáneamente el manejador del evento CurrentCellChanged o usar alguna
bandera que te indique que todavía no se cargaron los datos. Un ejemplo del primero es:
Código:
Private Sub frmMantenimientos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RemoveHandler miGrid.CurrentCellChanged, AddressOf miGrid_CurrentCellChanged
Dim objMantenimientos As New MantenimientosDB
miGrid.DataSource = objMantenimientos.Lista(FiltroActual)
miGrid.DataMember = "Mantenimientos"
miGrid.Columns("IDMantenimiento").Visible = False
AddHandler miGrid.CurrentCellChanged, AddressOf miGrid_CurrentCellChanged
**If miGrid.RowCount > 0 Then miGrid.CurrentCell = miGrid.Rows(0).Cells("NContrato")
End Sub
Saludos