No le veo problemas a tu código. Puede ser por que no estás controlando que haya una fila seleccionada.
Public Function Seleccion() As ArrayList
Dim cadena As New ArrayList
Dim row As New DataGridViewRow
If IsNothing(Me.GrillaListarPedidos.CurrentRow) Then
Return ""
End If
row = Me.GrillaListarPedidos.CurrentRow
For i As Integer = 0 To (CInt(Me.GrillaListarPedidos.ColumnCount - 1))
cadena.Add(row.Cells.Item(i).Value.ToString)
Next
Return cadena
End Function
Luego deberás controlar que cuando la función retorne una cadena vacía no haga la inserción en la segunda grilla.
Pdta: Si el problema persiste, puedes probar usando un
for each para recorrer las columnas. Es prefereible trabajar con For Each cuando se trata de colecciones por que se evitan los errores de índices.
Código Vb.Net:
Ver originalDim Celda as DataGridViewCell
for each Celda in row.Cells
cadena.Add(Celda.Value.ToString)
Next
Saludos.