Opzioni di ridimensionamento nel controllo DataGridView Windows Form

DataGridView righe, colonne e intestazioni possono modificare le dimensioni in seguito a molte occorrenze diverse. Nella tabella seguente vengono illustrate queste occorrenze.

Occorrenza Descrizione
Ridimensionamento utente Gli utenti possono apportare modifiche alle dimensioni trascinando o facendo doppio clic su righe, colonne o divisori di intestazione.
Ridimensionamento dei controlli In modalità riempimento colonna, la larghezza delle colonne cambia quando cambia la larghezza del controllo; Ad esempio, quando il controllo viene ancorato al relativo form padre e l'utente ridimensiona il form.
Modifica del valore della cella Nelle modalità di ridimensionamento automatico basate sul contenuto le dimensioni cambiano in base ai nuovi valori di visualizzazione.
Chiamata al metodo Il ridimensionamento basato sul contenuto a livello di codice consente di apportare modifiche delle dimensioni opportunistiche in base ai valori delle celle al momento della chiamata al metodo.
Impostazione della proprietà È anche possibile impostare valori di altezza e larghezza specifici.

Per impostazione predefinita, il ridimensionamento dell'utente è abilitato, il ridimensionamento automatico è disabilitato e i valori delle celle più ampi rispetto alle colonne vengono ritagliati.

La tabella seguente illustra gli scenari che è possibile usare per modificare il comportamento predefinito o per usare opzioni di ridimensionamento specifiche per ottenere effetti specifici.

Scenario Implementazione
Utilizzare la modalità di riempimento delle colonne per visualizzare dati di dimensioni simili in un numero relativamente ridotto di colonne che occupano l'intera larghezza del controllo senza visualizzare la barra di scorrimento orizzontale. Impostare la proprietà AutoSizeColumnsMode su Fill.
Usare la modalità di riempimento delle colonne con valori di visualizzazione di dimensioni variabili. Impostare la proprietà AutoSizeColumnsMode su Fill. Inizializzare le larghezze relative delle colonne impostando le proprietà della colonna FillWeight o chiamando il metodo di controllo AutoResizeColumns dopo aver riempito il controllo con i dati.
Usare la modalità di riempimento delle colonne con valori di importanza variabile. Impostare la proprietà AutoSizeColumnsMode su Fill. Impostare valori di grandi dimensioni MinimumWidth per le colonne che devono sempre visualizzare alcuni dati o usare un'opzione di ridimensionamento diversa dalla modalità di riempimento per colonne specifiche.
Usare la modalità riempimento colonna per evitare di visualizzare lo sfondo del controllo. Impostare la AutoSizeMode proprietà dell'ultima colonna su Fill e utilizzare altre opzioni di ridimensionamento per le altre colonne. Se le altre colonne utilizzano troppo spazio disponibile, impostare la MinimumWidth proprietà dell'ultima colonna.
Visualizzare una colonna a larghezza fissa, ad esempio un'icona o una colonna ID. Impostare su AutoSizeModeNone e Resizable su False per la colonna. Inizializzarne la larghezza impostando la Width proprietà o chiamando il metodo di controllo AutoResizeColumn dopo aver compilato il controllo con i dati.
Regolare automaticamente le dimensioni ogni volta che il contenuto delle celle cambia per evitare il ritaglio e ottimizzare l'uso dello spazio. Impostare una proprietà di ridimensionamento automatico su un valore che rappresenta una modalità di ridimensionamento basata sul contenuto. Per evitare una riduzione delle prestazioni quando si usano grandi quantità di dati, usare una modalità di ridimensionamento che calcola solo le righe visualizzate.
Modificare le dimensioni in modo da adattare i valori nelle righe visualizzate per evitare penalità sulle prestazioni quando si utilizzano molte righe. Usare i valori di enumerazione in modalità di ridimensionamento appropriati con ridimensionamento automatico o programmatico. Per regolare le dimensioni in base ai valori delle righe appena visualizzate durante lo scorrimento, chiamare un metodo di ridimensionamento in un Scroll gestore eventi. Per personalizzare il ridimensionamento doppio clic dell'utente in modo che solo i valori nelle righe visualizzate determinino le nuove dimensioni, chiamare un metodo di ridimensionamento in un RowDividerDoubleClick gestore eventi o ColumnDividerDoubleClick .
Regolare le dimensioni in modo da adattare il contenuto delle celle solo in momenti specifici per evitare penalità sulle prestazioni o per abilitare il ridimensionamento dell'utente. Chiamare un metodo di ridimensionamento basato sul contenuto in un gestore eventi. Ad esempio, usare l'evento DataBindingComplete per inizializzare le dimensioni dopo l'associazione e gestire l'evento CellValidated o CellValueChanged per regolare le dimensioni per compensare le modifiche o le modifiche dell'utente in un'origine dati associata.
Regolare le altezze delle righe per il contenuto delle celle multilinea. Assicurarsi che le larghezze delle colonne siano appropriate per la visualizzazione di paragrafi di testo e usare il ridimensionamento automatico o programmatico delle righe in base al contenuto per regolare le altezze. Assicurarsi inoltre che le celle con contenuto su più righe vengano visualizzate usando un WrapMode valore di stile cella pari Truea .

In genere, si userà una modalità di ridimensionamento automatico delle colonne per mantenere le larghezze delle colonne o impostarle su larghezze specifiche prima che le altezze delle righe vengano regolate.

Ridimensionamento con il mouse

Per impostazione predefinita, gli utenti possono ridimensionare righe, colonne e intestazioni che non usano una modalità di ridimensionamento automatico in base ai valori delle celle. Per impedire agli utenti di ridimensionare con altre modalità, ad esempio la modalità di riempimento delle colonne, impostare una o più delle proprietà seguenti DataGridView :

È anche possibile impedire agli utenti di ridimensionare singole righe o colonne impostandone Resizable le proprietà. Per impostazione predefinita, il valore della Resizable proprietà è basato sul valore della AllowUserToResizeColumns proprietà per le colonne e sul valore della AllowUserToResizeRows proprietà per le righe. Se tuttavia si imposta in modo esplicito su ResizableTrue o False, il valore specificato esegue l'override del valore del controllo per tale riga o colonna. Impostare Resizable su per NotSet ripristinare l'ereditarietà.

Poiché NotSet ripristina l'ereditarietà del valore, la Resizable proprietà non restituirà mai un NotSet valore a meno che la riga o la colonna non sia stata aggiunta a un DataGridView controllo . Se è necessario determinare se il Resizable valore della proprietà di una riga o di una colonna viene ereditato, esaminare la relativa State proprietà. Se il State valore include il ResizableSet flag, il valore della Resizable proprietà non viene ereditato.

Ridimensionamento automatico

Esistono due tipi di ridimensionamento automatico nel DataGridView controllo: modalità di riempimento delle colonne e ridimensionamento automatico basato sul contenuto.

La modalità riempimento colonna fa sì che le colonne visibili nel controllo riempiano la larghezza dell'area di visualizzazione del controllo. Per altre informazioni su questa modalità, vedere Modalità riempimento colonne nel controllo DataGridView Windows Form.

È anche possibile configurare righe, colonne e intestazioni per regolare automaticamente le dimensioni in base al contenuto della cella. In questo caso, la regolazione delle dimensioni si verifica ogni volta che il contenuto della cella cambia.

Nota

Se si mantengono i valori delle celle in una cache di dati personalizzata usando la modalità virtuale, il ridimensionamento automatico si verifica quando l'utente modifica un valore di cella ma non si verifica quando si modifica un valore memorizzato nella cache all'esterno di un CellValuePushed gestore eventi. In questo caso, chiamare il UpdateCellValue metodo per forzare il controllo per aggiornare la visualizzazione della cella e applicare le modalità di ridimensionamento automatico correnti.

Se il ridimensionamento automatico basato sul contenuto è abilitato solo per una dimensione, ovvero per le righe ma non per le colonne o per le colonne ma non per le righe, e WrapMode viene abilitata anche la regolazione delle dimensioni ogni volta che cambia l'altra dimensione. Ad esempio, se le righe ma non le colonne sono configurate per il ridimensionamento automatico e WrapMode sono abilitate, gli utenti possono trascinare i divisori di colonna per modificare la larghezza di una colonna e le altezze delle righe verranno regolate automaticamente in modo che il contenuto della cella sia ancora completamente visualizzato.

Se si configurano sia le righe che le colonne per il ridimensionamento automatico basato sul contenuto ed WrapMode è abilitato, il controllo regola le dimensioni ogni volta che il contenuto delle celle è stato modificato e userà un rapporto ideale di altezza-larghezza cella durante il DataGridView calcolo di nuove dimensioni.

Per configurare la modalità di ridimensionamento per intestazioni e righe e per le colonne che non eseguono l'override del valore del controllo, impostare una o più delle proprietà seguenti DataGridView :

Per eseguire l'override della modalità di ridimensionamento delle colonne del controllo per una singola colonna, impostarne la AutoSizeMode proprietà su un valore diverso da NotSet. La modalità di ridimensionamento per una colonna è effettivamente determinata dalla relativa InheritedAutoSizeMode proprietà. Il valore di questa proprietà è basato sul valore della proprietà della AutoSizeMode colonna, a meno che tale valore non sia NotSet, nel qual caso il valore del AutoSizeColumnsMode controllo viene ereditato.

Usare il ridimensionamento automatico basato sul contenuto con cautela quando si usano grandi quantità di dati. Per evitare penalità sulle prestazioni, utilizzare le modalità di ridimensionamento automatico che calcolano le dimensioni in base solo alle righe visualizzate anziché analizzare ogni riga nel controllo . Per ottenere prestazioni massime, usare il ridimensionamento a livello di codice in modo da poter essere ridimensionato in momenti specifici, ad esempio immediatamente dopo il caricamento dei nuovi dati.

Le modalità di ridimensionamento automatico basate sul contenuto non influiscono su righe, colonne o intestazioni nascoste impostando la proprietà riga o colonna Visible o il controllo RowHeadersVisible o ColumnHeadersVisible le proprietà su false. Ad esempio, se una colonna viene nascosta dopo che viene ridimensionata automaticamente per adattarsi a un valore di cella di grandi dimensioni, la colonna nascosta non modificherà le dimensioni se la riga contenente il valore della cella grande viene eliminata. Il ridimensionamento automatico non si verifica quando viene modificata la visibilità, pertanto la modifica della proprietà della colonna Visible su true non forza il ricalcolo delle dimensioni in base al relativo contenuto corrente.

Il ridimensionamento basato sul contenuto a livello di codice influisce su righe, colonne e intestazioni indipendentemente dalla visibilità.

Ridimensionamento a livello di codice

Quando il ridimensionamento automatico è disabilitato, è possibile impostare a livello di codice l'esatta larghezza o altezza di righe, colonne o intestazioni tramite le proprietà seguenti:

È anche possibile ridimensionare righe, colonne e intestazioni a livello di codice per adattarne il contenuto usando i metodi seguenti:

Questi metodi ridimensionano righe, colonne o intestazioni una sola volta anziché configurarle per il ridimensionamento continuo. Le nuove dimensioni vengono calcolate automaticamente per visualizzare tutto il contenuto della cella senza ritagliare. Quando si ridimensionano a livello di codice le colonne con InheritedAutoSizeMode valori delle proprietà di Fill, tuttavia, le larghezze calcolate basate sul contenuto vengono utilizzate per regolare in modo proporzionale i valori delle proprietà della colonna FillWeight e le larghezze delle colonne vengono quindi calcolate in base a queste nuove proporzioni in modo che tutte le colonne riempiano l'area di visualizzazione disponibile del controllo.

Il ridimensionamento a livello di codice è utile per evitare penalità sulle prestazioni con ridimensionamento continuo. È utile anche fornire dimensioni iniziali per righe, colonne e intestazioni ridimensionabili dall'utente e per la modalità di riempimento delle colonne.

In genere si chiamano i metodi di ridimensionamento a livello di codice in momenti specifici. Ad esempio, è possibile ridimensionare a livello di codice tutte le colonne immediatamente dopo il caricamento dei dati oppure ridimensionare a livello di codice una riga specifica dopo la modifica di un determinato valore di cella.

Personalizzazione del comportamento di ridimensionamento basato sul contenuto

È possibile personalizzare i comportamenti di ridimensionamento quando si utilizzano tipi di cella, riga e colonna derivati DataGridView eseguendo l'override dei DataGridViewCell.GetPreferredSizemetodi , DataGridViewRow.GetPreferredHeighto DataGridViewColumn.GetPreferredWidth o chiamando overload del metodo di ridimensionamento protetti in un controllo derivato DataGridView . Gli overload del metodo di ridimensionamento protetto sono progettati per lavorare in coppie per ottenere un rapporto ideale tra altezza e larghezza delle celle, evitando celle eccessivamente ampie o alte. Ad esempio, se si chiama l'overload AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) del AutoResizeRows metodo e si passa un valore di false per il Boolean parametro , l'overload calcolerà le altezze e le larghezze ideali per le celle della riga, ma regola solo le altezze delle righe. È quindi necessario chiamare il AutoResizeColumns metodo per regolare la larghezza delle colonne in base all'ideale calcolato.

Opzioni di ridimensionamento basate sul contenuto

Le enumerazioni utilizzate dalle proprietà e dai metodi di ridimensionamento hanno valori simili per il ridimensionamento basato sul contenuto. Con questi valori, è possibile limitare le celle usate per calcolare le dimensioni preferite. Per tutte le enumerazioni di ridimensionamento, i valori con nomi che fanno riferimento alle celle visualizzate limitano i calcoli alle celle nelle righe visualizzate. L'esclusione di righe è utile per evitare una riduzione delle prestazioni quando si lavora con una grande quantità di righe. È anche possibile limitare i calcoli ai valori delle celle nell'intestazione o nelle celle nonheader.

Vedi anche