Solución: Se debe controlar el evento CellPainting del DataGridView.
Para entenderlo mejor, pongo un ejemplo a continuación.
Tengo un formulario llamado Form1, el cual contiene un grid llamado DataGridView1.
En el load del formulario tengo el llenado del grid.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Se llenan datos de prueba en el grid
Dim dt As New DataTable()
dt.Columns.Add("c1")
dt.Columns.Add("c2")
For j As Integer = 0 To 9
dt.Rows.Add("aaaaaaaaa", "bbbb") 'Son datos cualquiera de prueba
Next
Me.DataGridView1.DataSource = dt
For j As Integer = 0 To 9
Dim height As Integer = TextRenderer.MeasureText(Me.DataGridView1(0, j).Value.ToString(), _
Me.DataGridView1.DefaultCellStyle.Font).Width
Me.DataGridView1.Rows(j).Height = height
Next
AddHandler DataGridView1.CellPainting, AddressOf dataGridView1_CellPainting 'Aqui se invoca al evento CellPainting
End Sub
Después se programa la parte del CellPainting.
No se utiliza la que viene por defecto en el Visual. Esto es copiar y pegar.
Private Sub dataGridView1_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs)
If e.ColumnIndex = 0 AndAlso e.RowIndex > -1 AndAlso e.Value IsNot Nothing Then
e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
Dim sf As New StringFormat()
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
sf.FormatFlags = StringFormatFlags.DirectionVertical 'Aqui le indico que sea vertical
e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, New SolidBrush(e.CellStyle.ForeColor), e.CellBounds, sf)
e.Handled = True
End If
End Sub
Nota: Ejemplos e información proporcionada desde está página web: Windows Forms Data Controls and Databinding FAQ