Pues directamente forzar el scrollbar yo no lo he logrado, pero una forma de "solucionarlo" puede ser la siguiente:
Código vb.net:
Ver originalDim fila_seleccionada As Int32 = Me.DataGridView1.CurrentRow.Index
actualizarDatos()
Me.DataGridView1.FirstDisplayedScrollingRowIndex = fila_seleccionada
Esto mantendrá visible la última fila que el usuario ha seleccionado.
También podrías jugar con el evento Scroll aunque no es tan exacto o al menos no he podido implementarlo 100% a mi gusto :P
Código vb.net:
Ver originalActualizarDatos()
Static i As Int32 = 0
If Me.valor_barra = 0 Then
Me.DataGridView1.FirstDisplayedScrollingRowIndex = i
Else
i = Me.valor_barra
Me.DataGridView1.FirstDisplayedScrollingRowIndex = Me.valor_barra
End If
El evento
Scroll tendría que tener este código
Código vb.net:
Ver originalPrivate Sub DataGridView1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles DataGridView1.Scroll
Me.valor_barra = e.OldValue
End Sub
la variable
valor_barra debes declararla como private al inicio de la clase para que pueda ser accedida desde cualquier parte de la misma.
Lo que hago es asignarle a esta variable el valor con el que se quede el scrollbar y cuando se actualiza el código comprueba primero si es que realmente se ha producido algún movimiento en la barra y luego le índica el índice de la fila que deberá mostrar primero.
Es un poco tedioso quizá, pero puede servirte como inicio y logres lo que tu desees.