Newsgroup: it.comp.lang.visual-basic
Titolo: problema datagrid

Ciao a tutti, eccomi con uno dei miei soliti problemini....
in un form, ho una DataGrid associata via codice ad un recordset (frutto
di una inner join), tramite l'istruzione:
Set MyGrid.DataSource = rsMioRecordSet
vorrei che selezionando una qualunque cella della griglia, magari tramite
un solo clik, possa selezionare il record associato a quella riga.
avrei fatto cosi', nell'evento Click della griglia:
Dim Stringa As String
    Stringa = "id = " MyGrid.Text
    rsCase.MoveFirst
    rsCase.Find Stringa
    frmSchedaCase.Show vbModal
il problema e' che se seleziono il "capo riga", funziona tutto, mentre se
seleziono una cella, la riga corrente risulta essere ancora quella
precedente.. per far funzionare il tutto, devo cliccare una seconda volta
sulla cella appartenente al record interessato.
Lo stesso succede se, in un secondo click (non un dblClick, pero') cambio
riga..... quella corrente risulta essere ancora una volta quella
selezionata prima.. mi sono spiegato? Rileggendomi, credo di no, quindi
faccio un esempio:
mettiamo che la griglia abbia 5 righe
clicco sulla riga 3, ma la riga attiva risulta essere la 0
clicco sulla riga 4, quella attiva e' la 3
e via di seguito
se ora clicco sul capo riga della 1, effettivamente la riga corrente e' la
1
Come mai??
Grazie e ciao.. Maurizio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 avrei fatto cosi', nell'evento Click della griglia:
Che mi risulti (non ho usato molto la datagrid), appena ti sposti si sposta
anche il cursore del recordset.
In pratica il record corrente è quello selezionato.
Se ad esempio fai una textbox:
    Set Text1.DataSource = Rs
    Text1.DataField = Rs.Fields("CAMPO").Name
Vedrai che cambia il contenuto non appena clicchi sulla griglia su un nuovo
record.
Senza impostare codice sulla griglia o sulla textbox.
Al limite ti fai una variabile variant 
Dim myMark as variant
myMark=Rs.Bookmark
E nell'altra finestra
Rs.Bookmark = MyMark
In tal modo si riposiziona su quel record, senza doverlo ricercare.
Ma ti ripeto che non dovrebbe essere necessario.
-- 
DBMS Firebird
VB6 + Ado

 anche il cursore del recordset.
...
Infatti risultava anche a me, e anche sull'msdn dice una cosa "simile".
Ho provato anche questa soluzione, ma non funziona correttamente, sempre
cliccando sulla cella, non sul capo-riga.
Boh, provero' all'ora di pranzo, quando sono un po' piu' tranquillo.
Ciao  e grazie.. Maurizio


Ciao,
Io di solito associo sempre un controllo Data alla DBGrid.
Quando poi mi necessita puntare alla riga selezionata lavoro tramite
il recordset dell'oggetto Data.
Penso che nel tuo caso
   rsMioRecordSet!ID
dovrebbe ritornarti il giusto valore.
Spero di esserti stata d'aiuto
lCerbiatto

 dovrebbe ritornarti il giusto valore.
...
Purtroppo non funziona neanche cosi', mi viene restituito sempre il
riferimento alla riga prededentemente selezionata, mentre se clicco sul
capo-rigo, tutto va ok.
forse sbaglio a mettere il codice nell'evento click, boh!
Grazie ancora... Maurizio


 forse sbaglio a mettere il codice nell'evento click, boh!
Nell'evento click non dovresti mettere nulla.
Probabilmente per qualche motivo non viene aggiornato il bookmark del
recordset.
Cosa intendi come capo rigo?


 Cosa intendi come capo rigo?
...
Quella "celletta" a sinistra della prima colonna; diciamo l'Head verticale
(mamma mia come mi spiego "brutto" ^____^ )
Quella insomma che permette di selezionare tutta la riga.
Ciao e grazie... Maurizio


 scheda (un altro form) del record interessato.
Ma tu nella nuova form cosa vuoi/devi passare? L'id del record, o tutto il
record corrente?
Cioč la nuova form carica i dati direttamente dal recordset passato, oppure
gli passi il long dell'id, questa carica i dati?
Nel secondo caso ti basterebbe passargli l'id. Non so se la griglia
supporta una cosa del genere:
Dim lChiave as Long
  lChiave= val(grdData.Columns("MioID").Value)
  Call CaricaForm2 (lChiave)
Questo deve essere per forza quello della riga corrente.
Oppure dato che parli di evento click, non ti merita impostare la griglia
con la selezione totale del record, cioč quando clicchi automaticamente ti
seleziona tutta la riga? Il problema dovrebbe sparire...


 seleziona tutta la riga? Il problema dovrebbe sparire...
...
Ho provato a fare anche questo, ma senza successo (anche se con poche
prove).
Cmq la soluzione che ho trovato e' per me validissima, anche perche', man
mano che provavo, mi venivano in mente delle altre operazioni possibili
sul record (stampe varie), che mi sarebbe stato difficile fare
semplicemente con il click, mentre ora, tramite opportuni Button, posso
gestire in maniera facile.
Pero' provero' ancora a vedere se posso riuscire a risolvere seguendo la
prima strada (click sulla cella e gestione dell'evento), tanto per
imparare qualche cosa di nuovo.
Grazie ancora... Maurizio 


 imparare qualche cosa di nuovo.
Prova a vedere MouseUp se c'č.
Eventi MouseDown e MouseUp
Vengono generati quando si preme (MouseDown) o si rilascia (MouseUp) un
pulsante del mouse.
