2015-04-28 28 views
5

Capisco che facendo quanto segue si aggiorna una query.Aggiorna query/cxGrid senza perdere il record selezionato

query.Close; 
query.Open; 

Ma dopo aver eseguito questa operazione, si concentra nuovamente sul primissimo record su cxGrid.

Esiste un modo per mantenere selezionato il record corrente dopo aver aggiornato la query?

Grazie.

ho fatto il seguente ..

procedure Tdatamodule.RefreshGrid; 
var pos : tbookmark; 
begin 
pos := qryMainGrid.GetBookmark; 
try 
    qryMainGrid.Close; 
    qryMainGrid.Open; 
    qryMainGrid.GotoBookmark(pos); 
finally 
    qryMainGrid.FreeBookmark(pos); 
end; 

fine;

Ma ora viene visualizzato il messaggio di errore segnalibro non trovato per il set di dati.

Qualsiasi suggerimento sarebbe molto apprezzato.

+0

A seconda del tipo di componente di query, è possibile aggiungere 'se qryMainGrid.BookmarkValid (pos) quindi' prima della chiamata a' GotoBookmark' per interrompere l'errore. –

+0

Sto usando TADquery che è un componente fireDAC, ho provato BookmarkValidate (pos) prima di GoToBookmark ma ottengo ancora lo stesso errore, Grazie – Sharpie

risposta

4

Per aggiornare il set di dati, chiamare il metodo Refresh e ricordare la posizione del cursore del set di dati utilizzare il segnalibro. Si esegue una query per il segnalibro alla posizione del cursore corrente chiamando GetBookmark, aggiornare il set di dati e passare alla posizione del segnalibro chiamando GotoBookmark:

var 
    Bookmark: TBookmark; 
begin 
    Bookmark := Query.GetBookmark; 
    Query.Refresh; 
    Query.GotoBookmark(Bookmark); 
end; 

Non è necessario chiamare FreeBookmark per liberare il segnalibro nel vostro Delphi versione perché il tipo TBookmark è diventato un array dinamico e come tale viene gestito dal compilatore quando esce dall'ambito della funzione.

+0

Ho apportato modifiche alla mia domanda originale con quello che ho fatto e ciò che sta accadendo ora, grazie – Sharpie

+0

@TLama che migliora le cose grazie, ma quando apro il mio modulo con cxGrid su di esso, visualizza la parte inferiore della griglia, ho molti record su questa griglia, c'è un modo per farlo mostrare la griglia in alto quando la forma si apre? Grazie, – Sharpie

+1

@TLama; Penso che alcune cose siano giuste sulla questione, altre potrebbero essere aggiunte in un altro commento. Ad ogni modo il risultato è buono, lo lasciamo. [Cancellerò anche questo commento più tardi]. Grazie. –