Ah bue... ahora si entendí, al menos eso creo :P
Quieres el índice que le asigna el datagrid? Pero tendrías el mismo "problema" que mencionas con el dataset al ordenar la columna porque el datagridview vuelve a asignarle los índices.
Si tienes el producto "Zanahoria" en el primer lugar te devolverá el índice 0, si lo ordenas en forma ascendente te devolverá el índice 49(suponiendo que la grilla tenga 50 filas). Al menos eso es lo que me ha pasado siempre.
Te dejo el código.
Código vb.net:
Ver originalFor Each fila As DataGridViewRow In Me.DataGridView1.Rows
If fila.Cells(1).Value.ToString() = "Chocolade" Then
MessageBox.Show(Me.DataGridView1.Rows.IndexOf(fila).ToString())
End If
Next
Recorres las filas y si encuentra coincidencias con el método IndexOf te muestra el índice.
Espero te ayude