Opzioni di ridimensionamento nel controllo DataGridView Windows Form

DataGridView Righe, colonne e intestazioni possono cambiare le dimensioni in seguito a molte occorrenze diverse. La tabella seguente illustra queste occorrenze.

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

Per impostazione predefinita, il ridimensionamento utente è abilitato, il ridimensionamento automatico è disabilitato e i valori delle celle più larghi 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
Usare la modalità di riempimento della colonna 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 della colonna con valori di visualizzazione di dimensioni variabili. Impostare la proprietà AutoSizeColumnsMode su Fill. Inizializzare la larghezza delle colonne relative impostando le proprietà della colonna o chiamando il metodo del controllo dopo FillWeightAutoResizeColumns aver riempito il controllo con dati.
Usare la modalità di riempimento della colonna con valori di importanza variabile. Impostare la proprietà AutoSizeColumnsMode su Fill. Impostare valori di grandi dimensioni per le colonne che devono sempre visualizzare alcuni dati o usare un'opzione di ridimensionamento diversa dalla modalità di MinimumWidth riempimento per colonne specifiche.
Usare la modalità di riempimento della colonna per evitare di visualizzare lo sfondo del controllo. Impostare la AutoSizeMode proprietà dell'ultima colonna su Fill e usare altre opzioni di ridimensionamento per le altre colonne. Se le altre colonne usano una quantità troppo grande di spazio disponibile, impostare MinimumWidth la proprietà dell'ultima colonna.
Visualizzare una colonna a larghezza fissa, ad esempio un'icona o una colonna ID. Impostare AutoSizeMode su e su per la NoneResizableFalse colonna. Inizializzare la larghezza impostando la proprietà o chiamando il metodo del controllo dopo aver WidthAutoResizeColumn riempito il controllo con 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 perdita di prestazioni quando si usano grandi quantità di dati, usare una modalità di ridimensionamento che calcola solo le righe visualizzate.
Modificare le dimensioni per adattare i valori nelle righe visualizzate per evitare penalità per le prestazioni quando si lavora con molte righe. Usare i valori di enumerazione appropriati della modalità di ridimensionamento con il ridimensionamento automatico o a livello di codice. Per regolare le dimensioni per adattare i valori nelle righe appena visualizzate durante lo scorrimento, chiamare un metodo di ridimensionamento in un Scroll gestore eventi. Per personalizzare il ridimensionamento con doppio clic dell'utente in modo che solo i valori nelle righe visualizzate determinano le nuove dimensioni, chiamare un metodo di ridimensionamento in un RowDividerDoubleClick gestore ColumnDividerDoubleClick eventi o .
Modificare le dimensioni in modo che si adattino al contenuto delle celle solo in momenti specifici per evitare penalità per le prestazioni o per consentire il ridimensionamento dell'utente. Chiamare un metodo di ridimensionamento basato sul contenuto in un gestore eventi. Ad esempio, usare l'evento per inizializzare le dimensioni dopo l'associazione e gestire l'evento o per modificare le dimensioni in modo da compensare le modifiche apportate dall'utente DataBindingCompleteCellValidated in CellValueChanged un'origine dati associata.
Regolare l'altezza delle righe per il contenuto di celle su più righe. Assicurarsi che le larghezze delle colonne siano appropriate per la visualizzazione di paragrafi di testo e usare il ridimensionamento automatico o programmatico delle righe basato sul contenuto per regolare le altezze. Assicurarsi inoltre che le celle con contenuto su più righe siano visualizzate usando un WrapMode valore di stile di cella pari a True .

In genere, si userà una modalità di ridimensionamento automatico delle colonne per mantenere la larghezza delle colonne o impostarle su larghezze specifiche prima di regolare l'altezza delle righe.

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 ridimensionarsi con altre modalità, ad esempio la modalità di riempimento della colonna, impostare una o più delle proprietà DataGridView seguenti:

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

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

Ridimensionamento automatico

Nel controllo sono disponibili due tipi di ridimensionamento automatico: modalità di riempimento della colonna e ridimensionamento automatico DataGridView basato sul contenuto.

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

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

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 gestore CellValuePushed eventi. In questo caso, chiamare il metodo per forzare il controllo ad aggiornare la visualizzazione della cella e UpdateCellValue 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, ed è abilitato, la regolazione delle dimensioni viene eseguita anche ogni volta che cambia l'altra WrapMode dimensione. Ad esempio, se le righe ma non le colonne sono configurate per il ridimensionamento automatico e sono abilitate, gli utenti possono trascinare i divisori di colonna per modificare la larghezza di una colonna e l'altezza delle righe verrà regolata automaticamente in modo che il contenuto delle celle sia ancora completamente WrapMode visualizzato.

Se si configurano righe e colonne per il ridimensionamento automatico basato sul contenuto ed è abilitato, il controllo regola le dimensioni ogni volta che il contenuto delle celle viene modificato e usa un rapporto ideale tra altezza e larghezza delle celle durante il calcolo delle nuove WrapModeDataGridView 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à DataGridView seguenti:

Per eseguire l'override della modalità di ridimensionamento delle colonne del controllo per una singola colonna, impostare la relativa 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 colonna, a meno che tale valore non sia , nel qual caso il valore del controllo AutoSizeModeNotSet viene AutoSizeColumnsMode ereditato.

Usare il ridimensionamento automatico basato sul contenuto con cautela quando si usano grandi quantità di dati. Per evitare penalità per le prestazioni, usare 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 invece il ridimensionamento a livello di codice in modo che sia possibile ridimensionare 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 o il controllo Visible o le proprietà su RowHeadersVisibleColumnHeadersVisiblefalse . Ad esempio, se una colonna viene nascosta dopo che è stata ridimensionata automaticamente per adattarla a un valore di cella di grandi dimensioni, la colonna nascosta non cambierà le dimensioni se la riga contenente il valore di cella grande viene eliminata. Il ridimensionamento automatico non si verifica quando cambia la visibilità, pertanto la modifica della proprietà della colonna in non ne forza il ricalcolo delle dimensioni in base Visibletrue al contenuto corrente.

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

Ridimensionamento a livello di codice

Quando il ridimensionamento automatico è disabilitato, è possibile impostare a livello di codice la larghezza o l'altezza esatta 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 delle celle senza ritaglio. Quando si ridimensionano a livello di codice le colonne con valori di proprietà di , tuttavia, le larghezze calcolate basate sul contenuto vengono usate per regolare in modo proporzionale i valori delle proprietà della colonna e le larghezze effettivamente delle colonne vengono quindi calcolate in base a queste nuove proporzioni in modo che tutte le colonne riempiono l'area di visualizzazione disponibile InheritedAutoSizeModeFill del FillWeight controllo.

Il ridimensionamento a livello di codice è utile per evitare penalizzazioni delle prestazioni con il ridimensionamento continuo. È anche utile 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 lavora con i tipi di cella, riga e colonna derivati eseguendo l'override dei metodi , o o chiamando gli overload del metodo di ridimensionamento protetti in un controllo DataGridViewDataGridViewCell.GetPreferredSizeDataGridViewRow.GetPreferredHeightDataGridViewColumn.GetPreferredWidthDataGridView derivato. Gli overload del metodo di ridimensionamento protetto sono progettati per funzionare in coppie per ottenere un rapporto ideale tra altezza e larghezza delle celle, evitando celle troppo larghe o alte. Ad esempio, se si chiama l'overload del metodo e si passa un valore per il parametro , l'overload calcolerà le altezze e la larghezza ideali per le celle nella riga, ma verrà regolata solo l'altezza delle AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean)AutoResizeRowsfalseBoolean righe. È quindi necessario chiamare il AutoResizeColumns metodo per adattare la larghezza delle colonne 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 penalizzazione delle prestazioni quando si utilizza una grande quantità di righe. È anche possibile limitare i calcoli ai valori delle celle nelle celle di intestazione o non di intestazione.

Vedi anche