Stili della cella nel controllo DataGridView Windows Form

Ogni cella all'interno del DataGridView controllo può avere uno stile specifico, ad esempio il formato del testo, il colore di sfondo, il colore di primo piano e il tipo di carattere. In genere, tuttavia, più celle condivideranno caratteristiche di stile specifiche.

I gruppi di celle che condividono stili possono includere tutte le celle all'interno di righe o colonne specifiche, tutte le celle che contengono valori specifici o tutte le celle del controllo. Poiché questi gruppi si sovrappongono, ogni cella può ottenere le informazioni di stile da più posizioni. Ad esempio, è possibile che ogni cella di un DataGridView controllo usi lo stesso tipo di carattere, ma solo le celle nelle colonne di valuta usino il formato valuta e solo le celle di valuta con numeri negativi per utilizzare un colore di primo piano rosso.

Classe DataGridViewCellStyle

La DataGridViewCellStyle classe contiene le proprietà seguenti correlate allo stile di visualizzazione:

Questa classe contiene anche le proprietà seguenti correlate alla formattazione:

Per altre informazioni su queste proprietà e altre proprietà di tipo cella, vedere la DataGridViewCellStyle documentazione di riferimento e gli argomenti elencati nella sezione Vedere anche di seguito.

Uso di oggetti DataGridViewCellStyle

È possibile recuperare DataGridViewCellStyle oggetti da varie proprietà delle DataGridViewclassi , DataGridViewColumnDataGridViewRow, e DataGridViewCell e dalle relative classi derivate. Se una di queste proprietà non è ancora stata impostata, il recupero del relativo valore creerà un nuovo DataGridViewCellStyle oggetto. È anche possibile creare un'istanza dei propri DataGridViewCellStyle oggetti e assegnarli a queste proprietà.

È possibile evitare la duplicazione non necessaria delle informazioni di stile condividendo DataGridViewCellStyle oggetti tra più DataGridView elementi. Poiché gli stili impostati nei livelli di controllo, colonna e riga vengono filtrati in base a ogni livello al livello di cella, è anche possibile evitare la duplicazione dello stile impostando solo le proprietà di stile a ogni livello che differiscono dai livelli precedenti. Questo argomento è descritto in modo più dettagliato nella sezione Ereditarietà dello stile riportata di seguito.

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

Proprietà Classi Descrizione
DefaultCellStyle DataGridViewClassi derivate , DataGridViewColumnDataGridViewRow, e Ottiene o imposta gli stili predefiniti utilizzati da tutte le celle dell'intero controllo (incluse le celle di intestazione), in una colonna o in una riga.
RowsDefaultCellStyle DataGridView Ottiene o imposta gli stili di cella predefiniti utilizzati da tutte le righe nel controllo . Ciò non include le celle di intestazione.
AlternatingRowsDefaultCellStyle DataGridView Ottiene o imposta gli stili di cella predefiniti utilizzati da righe alternate nel controllo . Usato per creare un effetto di tipo libro mastro.
RowHeadersDefaultCellStyle DataGridView Ottiene o imposta gli stili di cella predefiniti utilizzati dalle intestazioni di riga del controllo. Sottoposto a override dal tema corrente se gli stili di visualizzazione sono abilitati.
ColumnHeadersDefaultCellStyle DataGridView Ottiene o imposta gli stili di cella predefiniti utilizzati dalle intestazioni di colonna del controllo. Sottoposto a override dal tema corrente se gli stili di visualizzazione sono abilitati.
Style DataGridViewCell e classi derivate Ottiene o imposta gli stili specificati a livello di cella. Questi stili eseguono l'override di quelli ereditati da livelli superiori.
InheritedStyle DataGridViewCellClassi derivate , DataGridViewRowDataGridViewColumn, e Ottiene tutti gli stili attualmente applicati alla cella, alla riga o alla colonna, inclusi gli stili ereditati da livelli superiori.

Come accennato in precedenza, il recupero del valore di una proprietà di stile crea automaticamente un'istanza di un nuovo DataGridViewCellStyle oggetto se la proprietà non è stata impostata in precedenza. Per evitare di creare questi oggetti inutilmente, le classi di riga e di colonna dispongono di una HasDefaultCellStyle proprietà che è possibile verificare per determinare se la DefaultCellStyle proprietà è stata impostata. Analogamente, le classi di celle hanno una HasStyle proprietà che indica se la Style proprietà è stata impostata.

Ognuna delle proprietà di stile ha un evento PropertyNameChanged corrispondente nel DataGridView controllo . Per le proprietà di riga, colonna e cella, il nome dell'evento inizia con "Row", "Column" o "Cell" (ad esempio, RowDefaultCellStyleChanged). Ognuno di questi eventi si verifica quando la proprietà di stile corrispondente è impostata su un oggetto diverso DataGridViewCellStyle . Questi eventi non si verificano quando si recupera un DataGridViewCellStyle oggetto da una proprietà di stile e si modificano i relativi valori delle proprietà. Per rispondere alle modifiche apportate agli oggetti dello stile di cella stessi, gestire l'evento CellStyleContentChanged .

Ereditarietà degli stili

Ogni DataGridViewCell ottiene l'aspetto dalla relativa InheritedStyle proprietà. L'oggetto DataGridViewCellStyle restituito da questa proprietà eredita i relativi valori da una gerarchia di proprietà di tipo DataGridViewCellStyle. Queste proprietà sono elencate di seguito nell'ordine in cui l'oggetto InheritedStyle per le celle non di intestazione ottiene i relativi valori.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

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

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Per le celle di intestazione di riga e colonna, la InheritedStyle proprietà viene popolata da valori dell'elenco seguente di proprietà di origine nell'ordine specificato.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle oppure DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

La figura seguente illustra questo processo.

Properties of type DataGridViewCellStyle

È anche possibile accedere agli stili ereditati da righe e colonne specifiche. La proprietà column InheritedStyle eredita i relativi valori dalle proprietà seguenti.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La proprietà row InheritedStyle eredita i relativi valori dalle proprietà seguenti.

  1. DataGridViewRow.DefaultCellStyle

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

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Per ogni proprietà in un oggetto restituito da una DataGridViewCellStyleInheritedStyle proprietà, il valore della proprietà viene ottenuto dal primo stile di cella nell'elenco appropriato con la proprietà corrispondente impostata su un valore diverso da quello predefinito della DataGridViewCellStyle classe.

Nella tabella seguente viene illustrato il modo in cui il valore della ForeColor proprietà per una cella di esempio viene ereditato dalla colonna che lo contiene.

Proprietà di tipo DataGridViewCellStyle Valore di esempio 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 questo caso, il Color.Red valore della riga della cella è il primo valore reale nell'elenco. Questo diventa il ForeColor valore della proprietà dell'oggetto della InheritedStylecella.

Il diagramma seguente illustra come le diverse DataGridViewCellStyle proprietà possono ereditare i valori da posizioni diverse.

DataGridView property-value inheritance

Sfruttando l'ereditarietà dello stile, è possibile fornire stili appropriati per l'intero controllo senza dover specificare le stesse informazioni in più posizioni.

Sebbene le celle di intestazione partecipino all'ereditarietà di stile come descritto, gli oggetti restituiti dalle ColumnHeadersDefaultCellStyle proprietà e RowHeadersDefaultCellStyle del DataGridView controllo hanno valori di proprietà iniziali che eseguono l'override dei valori delle proprietà dell'oggetto restituito dalla DefaultCellStyle proprietà . Se si desidera che le proprietà impostate per l'oggetto restituito dalla DefaultCellStyle proprietà vengano applicate alle intestazioni di riga e colonna, è necessario impostare le proprietà corrispondenti degli oggetti restituiti dalle ColumnHeadersDefaultCellStyle proprietà e RowHeadersDefaultCellStyle sulle impostazioni predefinite indicate per la DataGridViewCellStyle classe .

Nota

Se gli stili di visualizzazione sono abilitati, le intestazioni di riga e di colonna (ad eccezione di TopLeftHeaderCell) vengono stilite automaticamente dal tema corrente, eseguendo l'override di tutti gli stili specificati da queste proprietà.

I DataGridViewButtonColumntipi , DataGridViewImageColumne DataGridViewCheckBoxColumn inizializzano anche alcuni valori dell'oggetto restituito dalla proprietà della colonna DefaultCellStyle . Per altre informazioni, vedere la documentazione di riferimento per questi tipi.

Impostazione dinamica degli stili

Per personalizzare gli stili delle celle con valori specifici, implementare un gestore per l'evento DataGridView.CellFormatting . I gestori per questo evento ricevono un argomento del DataGridViewCellFormattingEventArgs tipo. Questo oggetto contiene proprietà che consentono di determinare il valore della cella formattata insieme alla relativa posizione nel DataGridView controllo . Questo oggetto contiene anche una CellStyle proprietà inizializzata sul valore della InheritedStyle proprietà della cella da formattare. È possibile modificare le proprietà dello stile della cella per specificare le informazioni sullo stile appropriate per il valore e la posizione della cella.

Nota

Gli RowPrePaint eventi e RowPostPaint ricevono anche un DataGridViewCellStyle oggetto nei dati dell'evento, ma nel relativo caso si tratta di una copia della proprietà di riga InheritedStyle per scopi di sola lettura e le modifiche apportate non influiscono sul controllo.

È anche possibile modificare dinamicamente gli stili delle singole celle in risposta a eventi come gli DataGridView.CellMouseEnter eventi e CellMouseLeave . Ad esempio, in un gestore per l'evento CellMouseEnter , è possibile archiviare il valore corrente del colore di sfondo della cella (recuperato tramite la proprietà della Style cella), quindi impostarlo su un nuovo colore che evidenzia la cella quando il mouse passa il mouse su di esso. In un gestore per l'evento CellMouseLeave è quindi possibile ripristinare il colore di sfondo sul valore originale.

Nota

La memorizzazione nella cache dei valori archiviati nella proprietà della Style cella è importante indipendentemente dal fatto che sia impostato un determinato valore di stile. Se si sostituisce temporaneamente un'impostazione di stile, ripristinandola nello stato originale "non impostato" si garantisce che la cella tornerà a ereditare l'impostazione di stile da un livello superiore. Se è necessario determinare lo stile effettivo in vigore per una cella indipendentemente dal fatto che lo stile venga ereditato, utilizzare la proprietà della InheritedStyle cella.

Vedi anche