Newsgroup: it.comp.lang.delphi
Titolo: Numero riga in un dbgrid

Probabilmente ho dormito poco, ma pur avendo guardato dappertutto, non
riesco a trovare un modo per ricavare il numero della riga selezionata
in un DBGrid, quando si fa click con il mouse. 
L'unica proprieta' che mi pare possa venirmi in aiuto, dato che il
dataset associato al dbgrid e' un query, e quindi non si puo'
utilizzare la proprieta' RecNo (IsSequenced e' falso) , e' la
proprieta' Column.index, che pero' nell'evento onclick mi restituisce
sempre 0 ... :-(
Esiste qualche altra proprieta', o metodo per ricavare la riga
selezionata ogni volta che un utente fa click nel dbgrid, o e'
necessario per forza fare un loop sul dbgrid fino a trovare il record
corrente ... !
Ringrazio chiunque vorra' aiutarmi
ciao, Michele

SelectedIndex.

 wrote in message
3aefe2d1...@news.galactica.it...

Non c'è il numero della riga selezionata, credo con SelectedRows trovi
quello che cerchi.
Ciao
Simone

SelectedIndex.
Magari fosse vero :-)
La proprieta' SelectedIndex del dbgrid si riferisce alla colonna
selezionata. Sulla colonna selezionata (TColumn), non c'e' quella
proprieta', ma solo index, che comunque si riferisce all'indice della
colonna ... non resta che piangere mi pare :-(
grazie comunque
ciao, Michele

On Wed, 02 May 2001 10:46:12 GMT, 
micky...@galactica.it
 (Michele
Bendazzoli) wrote:
Penso di aver trovato una funzione abbastanza efficiente per
calcolarlo. Per chiunque possa interessare ecco quanto di meglio sono
riuscito a fare:
Function TFDistinta.DBGRecordIndex(DBGrid: TDBGrid): Integer;
Var
  i, rc: Integer;
  DS: TDataSet;
begin
  DS:=DBGrid.DataSource.DataSet;
  rc:=DS:RecordCount;
  DBGrid.DataSource.DataSet:=nil;
  i:=0;
  CurRec:=DS.GetBookMark;
  While not(DS.BOF) do
    i:=i+DS.MoveBy(-rc);
  DBGRecordIndex:=-i;
  DS.GotoBookmark(CurRec);
  DBGrid.DataSource.DataSet:=DS;
end;
ciao, Michele

Scusate gli errori, ecco la funzione corretta
On Wed, 02 May 2001 10:46:12 GMT, 
micky...@galactica.it
 (Michele
Bendazzoli) wrote:
Penso di aver trovato una funzione abbastanza efficiente per
calcolarlo. Per chiunque possa interessare ecco quanto di meglio sono
riuscito a fare:
Function DBGRecordIndex(DBGrid: TDBGrid): Integer;
Var
  i, rc: Integer;
  DS: TDataSet;
begin
  DS:=DBGrid.DataSource.DataSet;
  rc:=DS.RecordCount;


 colonna ... non resta che piangere mi pare :-(
Per cosa ti serve esattamente? Forse cosi' si puo' trovare una soluzione.
--
Giuseppe Fraddosio
fradd...@libero.it
fradd...@supereva.it

Per cosa ti serve esattamente? Forse cosi' si puo' trovare una soluzione.
Dovevo tenere sincronizzato un dbgrid che visualizzava la lista dei
figli di un nodo, con il nodo selezionato in un TreeView, visualizzato
su un'altra pagina. Per la freccia in su e in giu', combinazione di
tasti che mi spostavano la riga di una sola posizione, il problema era
facile da risolvere, il problema si poneva solo quando un utente
faceva click su una generica riga del dbgrid, dato che non conoscendo
la posizione della riga selezionata, mi trovavo costretto a fare una
scansione dell'intero dataset associato al dbgrid per trovare in che
posizione questa si trovasse.
Questa era ovviamente una soluzione insoddisfacente, che poteva avere
dei problemi di prestazioni per un numero elevato di righe nel
dataset.
Ad ogni modo queta soluzione grezza mi ha dato lo spunto per trovare
una soluzione che ritengo invece soddisfacente, sia in termini di
pulizia che di prestazioni. Ti riporto l'ultima versione (la 0.1?:-),
vedete voi poi se a qualcuno puo' essere utile come lo e' stata per
me:
Function DBGRecordIndex(DBGrid: TDBGrid): Integer;
Var
  DS: TDataSet;
  CurRec:TBookMark;
begin
  DS:=DBGrid.DataSource.DataSet;
  CurRec:=DS.GetBookMark;
  DBGrid.DataSource.DataSet:=nil;
  DBGRecordIndex:=-DS.MoveBy(-DS.RecordCount);


Ciao
SelectedRow restituisce solo la lista dei bookmarks delle righe
selezionate, che a me non serve, dato che ho selezionata una sola riga
(mutilselect=false), e comunque sono gia' in possesso del bookmark.
Grazie comunque,
ciao, Michele