Modo virtuale nel controllo DataGridView di Windows Form

Con la modalità virtuale, è possibile gestire l'interazione tra il DataGridView controllo e una cache dei dati personalizzata. Per implementare la modalità virtuale, impostare la VirtualMode proprietà su true e gestire uno o più degli eventi descritti in questo argomento. In genere si gestirà almeno l'evento CellValueNeeded , che consente al controllo di cercare i valori nella cache dei dati.

Modalità associata e modalità virtuale

La modalità virtuale è necessaria solo quando è necessario integrare o sostituire la modalità associata. In modalità associata, si imposta la DataSource proprietà e il controllo carica automaticamente i dati dall'origine specificata e invia di nuovo le modifiche dell'utente. È possibile controllare quali colonne associate vengono visualizzate e l'origine dati stessa gestisce in genere operazioni come l'ordinamento.

Integrazione della modalità associata

È possibile integrare la modalità associata visualizzando colonne non associate insieme alle colonne associate. Questa operazione è talvolta denominata "modalità mista" ed è utile per visualizzare elementi come i valori calcolati o i controlli dell'interfaccia utente.

Poiché le colonne non associate sono esterne all'origine dati, vengono ignorate dalle operazioni di ordinamento dell'origine dati. Pertanto, quando si abilita l'ordinamento in modalità mista, è necessario gestire i dati non associati in una cache locale e implementare la modalità virtuale per consentire al DataGridView controllo di interagire con esso.

Per altre informazioni sull'uso della modalità virtuale per gestire i valori nelle colonne non associate, vedere gli esempi negli argomenti di riferimento sulle proprietà e System.Windows.Forms.DataGridViewComboBoxColumn sulle DataGridViewCheckBoxColumn.ThreeState classi.

Sostituzione della modalità associata

Se la modalità associata non soddisfa le esigenze di prestazioni, è possibile gestire tutti i dati in una cache personalizzata tramite gestori eventi in modalità virtuale. Ad esempio, è possibile usare la modalità virtuale per implementare un meccanismo di caricamento dei dati JIT che recupera solo la quantità di dati da un database di rete necessaria per ottenere prestazioni ottimali. Questo scenario è particolarmente utile quando si lavora con grandi quantità di dati tramite una connessione di rete lenta o con computer client con una quantità limitata di RAM o spazio di archiviazione.

Per altre informazioni sull'uso della modalità virtuale in uno scenario JIT, vedere Implementazione della modalità virtuale con caricamento di dati JIT nel controllo DataGridView Windows Form.

Eventi in modalità virtuale

Se i dati sono di sola lettura, l'evento CellValueNeeded potrebbe essere l'unico evento che sarà necessario gestire. Altri eventi in modalità virtuale consentono di abilitare funzionalità specifiche, ad esempio le modifiche utente, l'aggiunta e l'eliminazione delle righe e le transazioni a livello di riga.

Alcuni eventi standard DataGridView , ad esempio eventi che si verificano quando gli utenti aggiungono o eliminano righe o quando i valori delle celle vengono modificati, analizzati, convalidati o formattati, sono utili anche in modalità virtuale. È anche possibile gestire gli eventi che consentono di mantenere i valori non archiviati in genere in un'origine dati associata, ad esempio testo della descrizione comando, testo della cella e dell'errore di riga, dati del menu di scelta rapida di cella e riga e dati di altezza riga.

Per altre informazioni sull'implementazione della modalità virtuale per gestire i dati di lettura/scrittura con un ambito di commit a livello di riga, vedere Procedura dettagliata: Implementazione della modalità virtuale nel controllo DataGridView Windows Form.

Per un esempio che implementa la modalità virtuale con un ambito di commit a livello di cella, vedere l'argomento di riferimento sulle VirtualMode proprietà.

Gli eventi seguenti si verificano solo quando la VirtualMode proprietà è impostata su true.

Evento Descrizione
CellValueNeeded Utilizzato dal controllo per recuperare un valore di cella dalla cache dei dati per la visualizzazione. Questo evento si verifica solo per le celle nelle colonne non associate.
CellValuePushed Usato dal controllo per eseguire il commit dell'input dell'utente per una cella nella cache dei dati. Questo evento si verifica solo per le celle nelle colonne non associate.

Chiamare il UpdateCellValue metodo quando si modifica un valore memorizzato nella cache all'esterno di un CellValuePushed gestore eventi per assicurarsi che il valore corrente venga visualizzato nel controllo e applicare le modalità di ridimensionamento automatico attualmente effettive.
NewRowNeeded Utilizzato dal controllo per indicare la necessità di una nuova riga nella cache dei dati.
RowDirtyStateNeeded Utilizzato dal controllo per determinare se una riga contiene modifiche di cui non è stato eseguito il commit.
CancelRowEdit Utilizzato dal controllo per indicare che una riga deve ripristinare i valori memorizzati nella cache.

Gli eventi seguenti sono utili in modalità virtuale, ma possono essere usati indipendentemente dall'impostazione della VirtualMode proprietà.

evento Descrizione
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Utilizzato dal controllo per indicare quando le righe vengono eliminate o aggiunte, consentendo di aggiornare di conseguenza la cache dei dati.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
Utilizzato dal controllo per formattare i valori delle celle per la visualizzazione e per analizzare e convalidare l'input dell'utente.
CellToolTipTextNeeded Utilizzato dal controllo per recuperare il testo della descrizione comando della cella quando la DataSource proprietà è impostata o la VirtualMode proprietà è true.

Lo strumento cella Suggerimenti viene visualizzato solo quando il valore della ShowCellToolTips proprietà è true.
CellErrorTextNeeded

RowErrorTextNeeded
Utilizzato dal controllo per recuperare il testo di errore della cella o della riga quando la DataSource proprietà è impostata o la VirtualMode proprietà è true.

Chiamare il UpdateCellErrorText metodo o il UpdateRowErrorText metodo quando si modifica il testo della cella o dell'errore di riga per assicurarsi che il valore corrente venga visualizzato nel controllo .

I glifi di errore di cella e riga vengono visualizzati quando i valori delle ShowCellErrors proprietà e ShowRowErrors sono true.
CellContextMenuStripNeeded

RowContextMenuStripNeeded
Utilizzato dal controllo per recuperare una cella o una riga ContextMenuStrip quando la proprietà del controllo DataSource è impostata o la VirtualMode proprietà è true.
RowHeightInfoNeeded

RowHeightInfoPushed
Utilizzato dal controllo per recuperare o archiviare le informazioni sull'altezza delle righe nella cache dei dati. Chiamare il UpdateRowHeightInfo metodo quando si modificano le informazioni sull'altezza della riga memorizzate nella cache all'esterno di un RowHeightInfoPushed gestore eventi per assicurarsi che il valore corrente venga utilizzato nella visualizzazione del controllo.

Procedure consigliate in modalità virtuale

Se si implementa la modalità virtuale per lavorare in modo efficiente con grandi quantità di dati, è anche necessario assicurarsi di lavorare in modo efficiente con il DataGridView controllo stesso. Per altre informazioni sull'uso efficiente degli stili di cella, il ridimensionamento automatico, le selezioni e la condivisione di righe, vedere Procedure consigliate per ridimensionare il controllo DataGridView Windows Form.

Vedi anche