2010-12-29 36 views
11

Ho uno strano problema ed è probabilmente una soluzione semplice, ma dopo molte ricerche, non riesco a trovare una soluzione.Come posso centrare l'intestazione in una colonna su un DataGridView?

Ho un DataGridView su cui sto cercando di centrare le intestazioni delle colonne, ma il risultato è un bias di sinistra nel centramento, quasi come un problema di indentazione. Ho visto alcuni post su questo problema su un sito o due, ma mai una soluzione. qualche idea?

Ecco la dichiarazione Attualmente sto cercando di utilizzare:

DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 

risposta

21

Il codice che hai postato è sulla strada giusta: è necessario impostare la proprietà ColumnHeadersDefaultCellStyle del vostro controllo DataGridView.

Tuttavia, è necessario creare una nuova classe di DataGridViewCellStyle e assegnare che alla proprietà ColumnHeadersDefaultCellStyle. Non è possibile modificare la proprietà Alignment come mostrato nell'esempio di codice a meno che non sia stata assegnata una classe DataGridViewCellStyle a questa proprietà.

intestazioni delle colonne Così, per esempio, il codice seguente raggiunge perfettamente centrato in un progetto vuoto:

Dim dgvColumnHeaderStyle As New DataGridViewCellStyle() 
dgvColumnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 

myDataGridView.ColumnHeadersDefaultCellStyle = dgvColumnHeaderStyle 

  DataGridView with centered column headings


In futuro, si può trovare più facile fare questi tipi di cose dal Designer. Se hai ancora bisogno di farlo da solo attraverso il codice, puoi controllare il file *.Designer.vb che viene creato per vedere come è stato fatto.


EDIT: ho appena notato il leggero scostamento ti riferisci nelle colonne-it effettivamente creare un chilo in più a destra di ogni intestazione. Non è un bug, però. C'è una spiegazione molto più semplice.

Come uno ListView, lo DataGridView supporta l'ordinamento per colonne. Pertanto, ogni intestazione di colonna riserva spazio sufficiente per visualizzare il glifo di ordinamento (solitamente una freccia) quando si calcola la giustificazione centrale.

Se si desidera che le intestazioni di colonna siano perfettamente centrate su, è necessario disabilitare l'ordinamento. Impostare la proprietà SortMode per la colonna su "Non disponibile". Ciò dovrebbe evitare che lo spazio venga riservato per il glifo di ordinamento ogni volta che il testo della colonna è centrato o giustificato a destra.

+2

Grazie per la vostra risposta rapida. Quello che noto però è che si ottiene lo stesso pregiudizio sinistro - ognuno dei titoli non è centrato. Sto leggendo alcune informazioni che sembrano indicare un bug, che richiede che ciascuna intestazione sia riempita con alcuni spazi vuoti, ma chiaramente varia in base alla lunghezza dell'intestazione della colonna. Sembra essere un riempimento di circa il 2,5% da aggiungere prima del testo. Chiaramente, non sembra una soluzione. Ho provato questo in alcuni modi e continuo a ottenere la stessa cosa. Strano, eh? – Keith

+0

BTW, il 2.Il 5% è della larghezza totale della colonna ... scusa per qualsiasi confusione generata dall'omissione. – Keith

+0

@ Keith: Ho appena notato cosa stai parlando. È divertente, non ho mai prestato attenzione a quello prima. E tutti i miei amici mi chiamano OCD-questo li mostrerà! Ho aggiornato la mia risposta con alcune nuove informazioni. –

1

Se si vuole centrare o utilizzare qualsiasi altro stile di allineamento del testo di intestazione di colonna è possibile utilizzare questo

dgvResults.Columns("ColumnName").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter 
Problemi correlati