1) con la GridView selezioni sì una singola cella ma hai comunque l'indicazione della riga a cui appartiene la cella selezionata con GridView.Row.
2) la ColumnView è quella che ti mostra visualmente la selezione della singola riga. Per leggere i dati delle singole righe non devi far altro che usare la ColumnView come una matrice.
Ecco un semplice esempio di codice, basato su una ColumnView chiamata Griglia:
PUBLIC SUB Form_Open()
Griglia.Clear
Griglia.Columns.Count = 4
Griglia.Columns[0].Width = 90
Griglia.Columns[1].Width = 240
Griglia.Columns[2].Width = 60
Griglia.Columns[3].Width = 240
Griglia.Columns[0].Text = "Targa"
Griglia.Columns[1].Text = "Veicolo"
Griglia.Columns[2].Text = "Chiave"
Griglia.Columns[3].Text = "Cliente"
END SUB
PUBLIC SUB Griglia_Click()
txtTarga.Text = griglia.Item[0]
txtVeicolo.Text = griglia.Item[1]
END
Nell'esempio riportato costruisco una griglia di 4 colonne e la riempio con i dati letti da un DB contenente le auto dei clienti (tralascio il codice di questo passaggio, insignificante per il tuo problema).
Cliccando sulla ColumnView, leggo dalla griglia i valori della cella 0 e della cella 1. Non mi devo preoccupare della riga perché questa è selezionata in automatico dall'oggetto.
Guarda il codice che ho pubblicato.
1) azzero la columnview;
2) imposto il n° di colonne;
3) usando un indice matriciale, imposto il testo per la colonna di testa;
4) imposto la larghezza delle singole colonne.
A questo punto le popolo con un semplice ciclo FOR. Ricordati che la ColumnView accetta la creazione dinamica di righe con il metodo Add(Chiave, Testo) dove Chiave è una chiave usata internamente, che io imposto sempre alla chiave del DB, in modo che sia un valore univoco). Il dato Testo viene impostato in automatico nella cella 0 della riga in fase di creazione. Per aggiungere gli altri valori basta poi usare la proprietà Item():
FOR i = 1 to Risultato.Count
Griglia.Add(Risultato["targa"], Risultato["targa"])
Griglia.Item[1] = Risultato["veicolo"]
Griglia.Item[2] = Risultato["chiave"]
Griglia.Item[3] = Risultato["nominativo"]
NEXT
Probabilmente ho ingenerato confusione io con i nomi adoperati, mi dispiace: "chiave" nel mio esempio è proprio la chiave dell'auto del cliente :-), mentre la Key della ColumnView è, nel mio esempio, il dato Risultato["targa"]. E' un estratto di codice preso da un mio programma, per cui devi scremare il nome delle variabili da quello dei campi.
Rileggi il mio codice così, se ti torna meglio:
FOR i = 1 to Risultato.Count
Griglia.Add(ChiavePrimaria, ChiavePrimaria)
Griglia.Item[1] = Dato1
Griglia.Item[2] = Dato2
Griglia.Item[3] = Dato3
NEXT
La Key della ColumnView va dichiarata, serve internamente a Gambas: ma non è detto che devi per forza poi rimetterla a video, puoi benissimo inserire nella cella 0 un altro dato (attenzione: tu fai una distinzione errata, item[0] contiene ciò che metti nella variabile che io chiamo "Testo", sempre e comunque). Esempio:
FOR i = 1 to Risultato.Count
Griglia.Add(ChiavePrimaria, Dato1)
Griglia.Item[1] = Dato2
Griglia.Item[2] = Dato3
Griglia.Item[3] = Dato4
NEXT