Από την στιγμή που έρχεσαι από ένα άλλο εργαλείο προγραμματισμού δεν νομίζω να δυσκολευτείς ιδιαίτερα να το πετύχεις. Τα βήματα που θα πρέπει νά κάνεις λογικά τα έχεις, το θέμα είναι σε ένα νέο εργαλείο πως θα τα υλοποιήσεις.
Γενικά αποφεύγω ο κώδικάς μου να συνδέεται με controls. Δηλαδή στην συγκεκριμένη περίπτωση στο CellDoubleClick του συγκεκριμένου Grid control να τρέξεις μία ρουτίνα που να σου πειστρέφει το συγκεκριμένο Row και να το περάσεις στην δεύτερη φόρμα. Αν αλλάξεις το Grid με κάποιο Third Party control όπως καταλαβαίνει αυτός ο κώδικάς θα πρέπει να αλλάξει.
Για το λόγο αυτό σχεδόν πάντα χρησιμοποιώ Data Binding που μου δίνει εκείνο το encapsulation που χρειάζομαι έτσι ώστε να μην χρειάζεται να γνωρίζω τι controls έχει η φόρμα μου και σε ποιον κατασκευαστή αυτά ανήκουν. Στην περίπτωση που αναφέρεις θα μπορούσες να εισάγεις ένα dataset στο project σου και να δημιουργήσεις σε αυτό τις στήλες που χρειάζεσαι.
Στην φόρμα που έχεις το Grid να προσθέσεις ένα BindingSource στο οποίο η τιμή του Property DataSource να είναι του τύπου dataset που έχεις δημιουργήσει.
Το αντίστοιχο property DataSource του Grid να δείχνει πάνω στο BindingSource.
Το BindingSource έχει ένα property που λέγεται Current και στην περίπτωση μας σου επιστρέφει την τρέχουσα εγγραφή του dataset την οποία εσύ έχεις επιλέξει στο grid.
Οπότε κάνοντας subscribe στο doublecellclick θα μπορούσες πολύ απλά να πάρεις την τρέχουσα εγγραφή γράφοντας BindingSource.Curreent.
Με τον παραπάνω κώδικα όπως καταλαβαίνεις, ανεξάρτητα τι control θα έχεις (grid, listbox και ότι βγει από κάποιο κατασκευαστή) ο συγκεκριμένος κώδικας πάντα θα παίζει.