Logo UGIdotNET

Orientare il testo della column header della DataGridView in verticale

Recentemente mi è capitato di dover implementare una griglia contenente molti campi (colonne) in una applicazione Windows Forms (versione 2.0) del framework. Per ottimizzare lo spazio ho pensato a disegnare le label dell'header delle colonne in verticale.

Per raggiungere l'obiettivo vi sono principalmente due modalità: implementare l'evento CellPaiting oppure derivare una classe da DataGridViewColumnHeaderCell ed implementare l'evento Paint. Ho optato per la prima via (più veloce anche se meno portabile).

Quando viene sollevato l'evento si verifica se si tratta della cella di intestazione (indice di riga -1 e indice di colonna maggiore di 1) e quindi si procede al disegno del testo opportunamente formattato (attraverso StringFormat). E' importante ricordarsi di ridisegnare lo sfondo (PaintBackground) per non avere effetti indesiderati (effetto memoria) quando si ridimensiona la larghezza della colonna o l'altezza dell'intestazione. 

Segue l'esempio di codice:

private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
  if (e.RowIndex == -1 && e.ColumnIndex > -1)
 {
     Rectangle r = e.CellBounds;
     StringFormat sf = new StringFormat();
     sf.Trimming = StringTrimming.EllipsisCharacter;
     sf.FormatFlags |= StringFormatFlags.NoWrap;
     sf.FormatFlags |= StringFormatFlags.DirectionVertical;

     e.PaintBackground(e.ClipBounds, false);
     e.Graphics.DrawString(
       dataGridView.Columns[e.ColumnIndex].HeaderText,
       e.CellStyle.Font,
       Brushes.Black,
       r,
       sf);

      e.Handled = true;
  }else
      e.Handled = false;
}

Autore: Pierre Greborio
Data: 08 marzo 2006
Ultimo aggiornamento: 08 marzo 2006
Categorie:  Windows Forms

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185