2012-03-21 11 views
5

Mam DataGridView, którego używam w projekcie C# Winforms. Siatka NIE generuje automatycznie kolumn. Ręcznie ustawiłem nazwy kolumn i właściwości.Wyrównanie komórek DataGridView nie zadziała

Dotyczy to także DefaultCellStyle dla komórek. Chcę, aby wszystkie komórki typu DataGridViewCheckBoxColumn zostały wyśrodkowane. Ręcznie ustawiłem to wyrównanie dla każdej kolumny tego typu w projektancie. Te zmiany nie pojawiają się, gdy załadowany jest datagridview.

W następnym podejściu Użyłem poniższy kod w przypadku DataBindingComplete (który również nie miał wpływu)

foreach (DataGridViewColumn dgvc in this.dgv_Automations.Columns) 
{ 
    if(dgvc.CellType == typeof(DataGridViewCheckBoxCell)) 
     dgvc.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
} 

Gdy debugowanie, powyższy kod już wyrównanie ustawić centrum. Jednak nadal nie pojawia się na siatce.

I CAN dostać to działa, jeśli w trakcie imprezy DataBindingComplete zrobić coś takiego:

foreach (DataGridViewRow dgvr in this.dgv_Automations.Rows) 
{ 
    dgvr.Cells["isErrors"].Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
} 

Mam jednak wiele z tych kolumn i to naprawdę nie ma sensu, aby zrobić to w ten sposób . EDYTOWANIE: Zaimplementowałem go w ten sposób i tylko z około 10 wierszy jest bardzo zauważalne opóźnienie od ustawienia tej właściwości w każdej komórce.

Moje pytanie brzmi: jaki jest właściwy sposób robienia tego? Dlaczego projektant DefaultCellStyle nie działa?

+0

Proszę nie zamieniać tytułów na "C#" i tym podobne. Po to są te tagi. –

+0

Noted. Nie będzie w przyszłości. – ImGreg

Odpowiedz

7

Według MSDNDefaultCellStyle z DataGridViewColumn jest zastępowany przez stylów określonych przez DataGridView.RowsDefaultCellStyle, DataGridView.AlternatingRowsDefaultCellStyle, DataGridViewRow.DefaultCellStyle i DataGridViewCell.Style właściwości.
Więc to possibile, że jeden z tych stylów są ustawione na wartości niezgodnych z wymaganą wyrównania (na przykład DataGridViewContentAlignment.NotSet lub DataGridViewContentAlignment.TopLeft)