Domanda

Il mio C++ CAD applicazione che gestisce i registri dell'utente le operazioni di modellazione in modo che possano essere scollegato e ricollegato.Qualsiasi progetto, in particolare, può contenere solo un numero limitato di operazioni o non può contenere centinaia di migliaia di operazioni.Ho già i miei dati strutture per gestire questi dati in un modo che sia efficace in termini di memoria, e questo ha funzionato bene.Ma ora sto aggiungendo una funzionalità che consente all'utente di controllare il suo funzionamento registri in una griglia.(Sto usando Embarcadero RAD Studio 2010;tutte le Gui di utilizzare VCL.)

Attualmente, sto usando una TDBGrid componente per mostrare all'utente il funzionamento i dati in righe.Ecco come io ho i miei componenti collegate:

TDBGrid.DataSource = un TDataSource

TDataSource.DataSet = un TClientDataSet

TClientDataSet.ProviderName = un TDataSetProvider

TDataSetProvider.DataSet = un ProjectDataSet

Un ProjectDataSet è una classe che ho derivato da TDataSet.

Perché sto tirando i dati di funzionamento, a partire dalla mia strutture di dati e non da un database, ho disattivato il GetFieldData e GetRecord funzioni (e molti altri) nel mio ProjectDataSet classe, in modo che restituisca i dati direttamente dalla mia strutture di dati (senza fare qualsiasi query al database).Questo funziona.

Al fine di ridurre al minimo l'utilizzo della memoria durante la visualizzazione di un sacco di operazioni, ho impostato l' 'FetchOnDemand' proprietà in mio TClientDataSet e ho impostato 'PacketRecords' a 100.Così, all'inizio, solo i primi 100 operazioni vengono visualizzati nella griglia.Una volta che l'utente scorre verso il fondo della griglia, i prossimi 100 operazioni vengono automaticamente prelevati dal TClientDataSet e visualizzati nella griglia.

Tutto questo funziona molto bene.Il mio problema è che quando l'utente scorre la griglia, il TClientDataSet continua il recupero di ulteriori e più record senza mai rilasciare qualsiasi.Così, se l'utente scorre verso il basso abbastanza lontano, in un progetto molto grande, alla fine ho esaurito la memoria.

Allora la mia domanda è:qual è il modo migliore per rendere la GUI di lavoro?In sostanza, voglio la griglia di comportarsi come un foglio di calcolo.Voglio che l'utente sarà in grado di scorrere su e giù attraverso l'operazione di lista (o saltare una riga specifica), indipendentemente dal numero di operazioni ci sono, e non voglio che i componenti dell'interfaccia grafica di mantenere un sacco di roba in memoria che l'utente non imminente necessità.

Sto assumendo che il TDBGrid (o di qualche altro componente VCL) è stato progettato per essere in grado di visualizzare arbitrariamente grandi insiemi di dati per il recupero di solo un paio di record alla volta, così come è destinato a essere fatto?

Se ho bisogno di ripensare la GUI, va bene.Ma sarebbe davvero bello se potessi usare la stessa interfaccia grafica per la visualizzazione di 10 progetti o 100.000 progetti.

Grazie.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top