2009-03-23 14 views

risposta

5

Non sono sicuro di aver capito la tua domanda, ma tenterò una risposta e forse puoi chiarire se questo non è ciò che stai chiedendo.

Poiché un TDBGrid è legato a un DataSource, la riga corrente è la stessa della riga corrente nell'origine dati. È possibile eseguire una query su DataSource, esaminando un valore di chiave primaria o la proprietà RecNo per determinare quale record è quello corrente.

0

Se non si desidera dipendere dall'origine dati per fornire un conteggio record e un record corrente (ad esempio perché si utilizza un cursore unidirezionale su un server remoto), quindi la tecnica di accesso alle proprietà del può essere utilizzato il controllo di rete sottostante.

Vedere this answer in una domanda StackOverflow simile.

+0

Hai iniziato a dire la cosa corretta, ma il link che hai indicato mostra solo come ottenere il recordcount ma i più importanti (RecNo o Row o CurrentRow, ecc.) Non possono essere ottenuti direttamente dalla griglia. Scusa –

+0

@Carlos: cosa ti impedisce di scrivere 'Riga: = TDummyGrid (MyDBGrid) .Row' invece di' RowCount: = TDummyGrid (MyDBGrid) .RowCount'? È necessario un minimo di pensiero, sai ... – mghie

+0

Beh ... Voglio mostrare colori alternativi sulla mia Griglia, ma la proprietà ROW non è "persistente" tra le modifiche del cursore, cioè, se muovi il cursore in alto o in basso sulla griglia, modificando la selezione, la proprietà ROW cambia per TUTTE le righe visibili allo stesso tempo. Ho bisogno di un modo per identificare ogni riga individualmente, indipendentemente dalla riga selezionata. Ora sto usando il RecNo del set di dati collegato, ma su dataset unidirezionali, questa proprietà è inutile. Come puoi vedere, E 'RICHIESTO UN PICCOLO PECCATO DI PENSIERO, ma TU sei stato il pigro. Scusa ... –

4

Si può fare in questo modo:

1 - Definire una classe locale che è una copia di TDBGrid (questo vi permetterà di accedere metodi privati):

type 
    THackDBGrid = class(TDBGrid); 

2 - Poi si può lanciare alla classe definita a livello locale, e tirare da metodi privati ​​come in:

function TfrmMain.GetFieldValue(colnum : integer): string; 
begin 
    Result := THackDBGrid(grdMain).GetFieldValue(colnum); 
end; 

Oppure, per ottenere la riga #:

function CurrentRowNumber: integer; 
    Result := THackDBGrid(grdMain).Row; 
end; 

Questa tecnica è utile anche in altre situazioni, ma non posso rivendicare il credito. I got it from here.

Problemi correlati