Mover fila en el DataGridView arriba y abajo con botón DataGridViewButtonColumn

Problema: Tengo un grid con dos columnas tipo botón, un botón indica subir una fila y el otro botón indica bajar una fila. Debo mover las filas de arriba hacia abajo dependiendo del clic en su respectivo botón.
Solución: Después de buscar por un buen rato en el Internet, no encontré una forma directa, así que tuve que realizar mi propia opción.

Nota: Mi DataGridView está enlazado a un BindingSource el cual está enlazado a un DataTable (que enredo), lo que significa que los datos iniciales (los que se presentan en el grid) son fueron llenados originariamente en el DataTable, por lo que debo modificar directamente el DataTable.

La acción de mover no es otra cosa que eliminar la fila actual e insertarla una posición arriba o abajo de la que se encontraba originariamente.

'Debo obtener la acción clic de la columna botón
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
       'Sirve para obtener el índice de la fila a mover
        Dim indice As Integer
       'Se crea una nueva fila a partir de la DataTable que está enlazada al grid
        Dim dr As DataRow = DataTable.NewRow()
        'Obtiene la posición actual de la fila a moverse
        indice = DataGridView1.CurrentRow.Index
        'Pregunto si se dio clic en la columna botón arriba
        If DataGridView1.Columns(e.ColumnIndex).Name = "arriba" Then
                'Se encuentra en la parte superior del grid
                If indice = 0 Then
                        Exit Sub
                End If
                'Se deben de insertar los datos en la fila, campo x campo
                dr(0) = DataGridView1.Rows(indice).Cells("campo0").Value
                dr(1) = DataGridView1.Rows(indice).Cells("campo1").Value
                'Primero se elimina la fila actual
                DataTable.Rows.RemoveAt(indice)
                'Después se inserta la fila copiada una posición arriba
                DataTable.Rows.InsertAt(dr, indice - 1)
                'Posiciona el foco en la posición actual
                DataTable.CurrentCell = DataTable.Rows(indice - 1).Cells(0)
        End If
        'Se repiten los mismos pasos para la columna botón abajo
        'Solo que se cambia el signo
        'Click en la columna botón abajo
        If DataGridView1.Columns(e.ColumnIndex).Name = "abajo" Then
                'Se encuentra en la parte inferior del grid
                If indice = DataGridView1.Rows.Count - 1 Then
                        Exit Sub
                End If
                'Se deben de insertar los datos en la fila, campo x campo
                dr(0) = DataGridView1.Rows(indice).Cells("campo0").Value
                dr(1) = DataGridView1.Rows(indice).Cells("campo1").Value
                'Primero se elimina la fila actual
                DataTable.Rows.RemoveAt(indice)
                'Después se inserta la fila copiada una posición abajo
                DataTable.Rows.InsertAt(dr, indice + 1)
                'Posiciona el foco en la posición actual
                DataTable.CurrentCell = DataTable.Rows(indice + 1).Cells(0)
        End If
End Sub

No se necesita actualizar el BindingSource o el DataGridView, si están enlazados al DataTable, puesto que se hace automáticamente.