Stili della cella nel controllo DataGridView Windows Form

Ogni cella contenuta nel controllo DataGridView può disporre di uno stile specifico, ad esempio il formato del testo, il colore di sfondo, il colore di primo piano e il tipo di carattere. Di solito, tuttavia, più celle condividono caratteristiche di stile particolari.

I gruppi di celle che condividono gli stili possono essere composti da tutte le celle contenute in righe o colonne particolari, da tutte le celle che contengono valori particolari o da tutte le celle del controllo. Poiché tali gruppi si sovrappongono, è possibile che le informazioni sullo stile per ciascuna cella derivino da più fonti. Si supponga, ad esempio, di desiderare che tutte le celle di un controllo DataGridView utilizzino lo stesso tipo di carattere ma che solo le celle nelle colonne della valuta utilizzino la formattazione per la valuta e che solo le celle relative alla valuta con numeri negativi utilizzino il rosso come colore di primo piano.

Classe DataGridViewCellStyle

La classe DataGridViewCellStyle contiene le proprietà riportate di seguito relative allo stile di visualizzazione:

La classe contiene inoltre le proprietà riportate di seguito relative alla formattazione:

Per ulteriori informazioni su queste proprietà e su altre proprietà relative allo stile delle celle, vedere la documentazione di riferimento su DataGridViewCellStyle e gli argomenti elencati nella sezione Vedere anche alla fine del presente argomento.

Utilizzo di oggetti DataGridViewCellStyle

È possibile recuperare oggetti DataGridViewCellStyle da varie proprietà delle classi DataGridView, DataGridViewColumn, DataGridViewRow e DataGridViewCell e delle classi derivate. Se una di tali proprietà non è ancora stata impostata, il recupero del relativo valore comporterà la creazione di un nuovo oggetto DataGridViewCellStyle. È inoltre possibile creare istanze personalizzate di oggetti DataGridViewCellStyle e assegnarle a tali proprietà.

Per evitare un'inutile duplicazione di informazioni sullo stile, è possibile fare in modo che oggetti DataGridViewCellStyle vengano condivisi da più elementi DataGridView. Poiché gli stili impostati a livello di controllo, colonna e riga eseguono un'azione di filtro verso il basso fino al livello della cella, è inoltre possibile evitare la duplicazione degli stili impostando a ogni livello solo le proprietà di stile diverse rispetto ai livelli superiori. Ciò viene descritto in modo più approfondito nella sezione Ereditarietà dello stile riportata di seguito.

Nella tabella seguente sono elencate le proprietà principali che ottengono o impostano oggetti DataGridViewCellStyle.

Proprietà

Classi

Descrizione

DefaultCellStyle

DataGridView, DataGridViewColumn, DataGridViewRow e classi derivate

Ottiene o imposta stili predefiniti utilizzati da tutte le celle dell'intero controllo (celle di intestazione incluse), di una colonna o di una riga.

RowsDefaultCellStyle

DataGridView

Ottiene o imposta stili di cella predefiniti utilizzati da tutte le righe del controllo. Le celle di intestazione sono escluse.

AlternatingRowsDefaultCellStyle

DataGridView

Ottiene o imposta stili di cella predefiniti utilizzati da righe alterne del controllo. Utilizzata per creare un effetto registro.

RowHeadersDefaultCellStyle

DataGridView

Ottiene o imposta stili di cella predefiniti utilizzati dalle intestazioni di riga del controllo. Viene sottoposta a override dal tema corrente se sono attivati gli stili di visualizzazione.

ColumnHeadersDefaultCellStyle

DataGridView

Ottiene o imposta stili di cella predefiniti utilizzati dalle intestazioni di colonna del controllo. Viene sottoposta a override dal tema corrente se sono attivati gli stili di visualizzazione.

Style

DataGridViewCell e classi derivate

Ottiene o imposta stili specificati a livello di cella. Tali stili eseguono l'override su quelli ereditati dai livelli precedenti.

InheritedStyle

Classi DataGridViewCell, DataGridViewRow, DataGridViewColumn e derivate

Ottiene tutti gli stili correnti applicati alla cella, alla riga o alla colonna, tra cui gli stili ereditati dai livelli precedenti.

Come accennato in precedenza, una volta ottenuto il valore di una proprietà di stile viene creata automaticamente un'istanza di un nuovo oggetto DataGridViewCellStyle, se la proprietà non è stata ancora impostata. Per evitare la creazione superflua di tali oggetti, le classi di riga e colonna dispongono di una proprietà HasDefaultCellStyle che è possibile consultare per appurare se la proprietà DefaultCellStyle è stata impostata. Anche le classi di cella dispongono di una proprietà HasStyle che indica se la proprietà Style è stata impostata.

A ciascuna proprietà di stile corrisponde un evento NomeProprietàChanged nel controllo DataGridView. Per le proprietà di riga, colonna e cella il nome dell'evento inizia per "Row", "Column" o "Cell", ad esempio RowDefaultCellStyleChanged. Ogni evento si verifica quando la proprietà di stile corrispondente è impostata su un oggetto DataGridViewCellStyle diverso. Gli eventi non si verificano quando si recupera un oggetto DataGridViewCellStyle da una proprietà di stile e se ne modificano i valori della proprietà. Per rispondere alle modifiche apportate agli oggetti dello stile di celle stessi, gestire l'evento CellStyleContentChanged.

Ereditarietà dello stile

Ogni classe DataGridViewCell ottiene il relativo aspetto dalla proprietà InheritedStyle. L'oggetto DataGridViewCellStyle restituito da tale proprietà eredita i valori da una gerarchia di proprietà di tipo DataGridViewCellStyle. Tali proprietà sono elencate di seguito nell'ordine in cui la proprietà InheritedStyle di celle diverse da quelle di intestazione ottiene i valori.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (solo per celle in righe con numeri di indice dispari)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Relativamente a celle di intestazione di riga e colonna, la proprietà InheritedStyle eredita i valori dall'elenco di proprietà origine riportato di seguito, nell'ordine indicato.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle oppure DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Nel diagramma che segue viene illustrato questo processo.

Proprietà di tipo DataGridViewCellStyle

È inoltre possibile accedere agli stili ereditati da specifiche righe e colonne. La proprietà InheritedStyle di colonna eredita i valori dalle proprietà seguenti.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La proprietà InheritedStyle di riga eredita i valori dalle proprietà seguenti.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (solo per celle in righe con numeri di indice dispari)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Per ogni proprietà di un oggetto DataGridViewCellStyle restituito da una proprietà InheritedStyle, il valore è ottenuto dal primo stile di cella nell'elenco appropriato la cui proprietà corrispondente è impostata su un valore diverso da quelli predefiniti della classe DataGridViewCellStyle.

Nella tabella riportata di seguito viene illustrato come il valore della proprietà ForeColor per una cella di esempio venga ereditato dalla colonna in cui la cella è contenuta.

Proprietà di tipo DataGridViewCellStyle

Valore di esempio di ForeColor per l'oggetto recuperato

DataGridViewCell.Style

Color.Empty

DataGridViewRow.DefaultCellStyle

Color.Red

DataGridView.AlternatingRowsDefaultCellStyle

Color.Empty

DataGridView.RowsDefaultCellStyle

Color.Empty

DataGridViewColumn.DefaultCellStyle

Color.DarkBlue

DataGridView.DefaultCellStyle

Color.Black

In tal caso il valore Color.Red che deriva dalla riga della cella è il primo valore effettivo nell'elenco. Diventa il valore della proprietà ForeColor della proprietà InheritedStyle della cella.

Nel diagramma seguente viene illustrato il modo in cui proprietà DataGridViewCellStyle diverse possono ereditare i rispettivi valori da origini diverse.

Eredità del valore della proprietà DataGridView

L'ereditarietà dello stile consente di fornire stili appropriati per l'intero controllo senza dover specificare le stesse informazioni in più punti.

Nonostante l'ereditarietà dello stile valga anche per le celle di intestazione, gli oggetti restituiti dalle proprietà ColumnHeadersDefaultCellStyle e RowHeadersDefaultCellStyle del controllo DataGridView dispongono di valori di proprietà iniziali che eseguono l'override di quelli dell'oggetto restituito dalla proprietà DefaultCellStyle. Se si desidera che le proprietà impostate per l'oggetto restituito dalla proprietà DefaultCellStyle vengano applicate alle intestazioni di riga e colonna, è necessario impostare le proprietà corrispondenti degli oggetti restituiti dalle proprietà ColumnHeadersDefaultCellStyle e RowHeadersDefaultCellStyle sui valori predefiniti indicati per la classe DataGridViewCellStyle.

Nota

Se sono attivati stili di visualizzazione, alle intestazioni di riga e colonna (ad eccezione della proprietà TopLeftHeaderCell) viene applicato automaticamente lo stile del tema corrente e viene eseguito l'override di eventuali stili specificati da tali proprietà.

I tipi DataGridViewButtonColumn, DataGridViewImageColumn e DataGridViewCheckBoxColumn inizializzano inoltre alcuni valori dell'oggetto restituito dalla proprietà DefaultCellStyle di colonna. Per ulteriori informazioni, vedere la documentazione di riferimento relativa a tali tipi.

Impostazione dinamica degli stili

Per personalizzare gli stili di celle con valori particolari, implementare un gestore per l'evento DataGridView.CellFormatting. I gestori di tale evento ricevono un argomento di tipo DataGridViewCellFormattingEventArgs. Tale oggetto contiene proprietà che consentono di determinare il valore della cella formattata unitamente alla sua posizione nel controllo DataGridView. L'oggetto contiene inoltre una proprietà CellStyle inizializzata sul valore della proprietà InheritedStyle della cella sottoposta a formattazione. È possibile modificare le proprietà dello stile delle celle per specificare informazioni relative allo stile appropriate per il valore e la posizione della cella.

Nota

Gli eventi RowPrePaint e RowPostPaint ricevono inoltre un oggetto DataGridViewCellStyle nei dati di evento ma nel loro caso si tratta di una copia della proprietà InheritedStyle della riga in modalità di sola lettura e le modifiche apportate all'oggetto non incidono sul controllo.

È inoltre possibile modificare dinamicamente gli stili di singole celle in risposta a eventi quali DataGridView.CellMouseEnter e CellMouseLeave. In un gestore dell'evento CellMouseEnter, ad esempio, è possibile memorizzare il valore corrente del colore di sfondo della cella (recuperato dalla proprietà Style della cella) e impostarlo su un nuovo colore con cui la cella viene evidenziata quando il mouse si posiziona su di essa. È in seguito possibile ripristinare il valore originale del colore di sfondo in un gestore dell'evento CellMouseLeave.

Nota

L'inserimento nella cache dei valori memorizzati nella proprietà Style della cella è un'operazione importante indipendentemente dall'impostazione di un valore di stile particolare. Se si sostituisce temporaneamente un'impostazione dello stile, il ripristino dello stato "non impostato" originale garantisce che la cella ritorni a ereditare l'impostazione dello stile da un livello superiore. Se è necessario determinare lo stile effettivo attivo per una cella e non è importante sapere se lo stile è ereditato, utilizzare la proprietà InheritedStyle della cella.

Vedere anche

Attività

Procedura: impostare stili di cella predefiniti per il controllo DataGridView di Windows Form

Riferimenti

DataGridView

DataGridViewCellStyle

DataGridView.AlternatingRowsDefaultCellStyle

DataGridView.ColumnHeadersDefaultCellStyle

DataGridView.DefaultCellStyle

DataGridView.RowHeadersDefaultCellStyle

DataGridView.RowsDefaultCellStyle

DataGridViewBand.InheritedStyle

DataGridViewRow.InheritedStyle

DataGridViewColumn.InheritedStyle

DataGridViewBand.DefaultCellStyle

DataGridViewCell.InheritedStyle

DataGridViewCell.Style

DataGridView.CellFormatting

DataGridView.CellStyleContentChanged

DataGridView.RowPrePaint

DataGridView.RowPostPaint

Concetti

Formattazione di dati nel controllo DataGridView di Windows Form

Altre risorse

Formattazione e stile di base nel controllo DataGridView Windows Form