Agregar columnas a un Datagridview
Hola a todos...
A continuacin tenemos un ejemplo que permitir personalizar
las columnas del datagridview.
Imagen
******
Cdigo fuente
************
Paso 1:
******
'Configuramos el nuevo tamao de las columna al momento de cargar el formulario.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) H
andles MyBase.Load
' Habilitar el cambio de tamao en los encabezados de columna
DataGridView1.ColumnHeadersHeightSizeMode = _
DataGridViewColumnHeadersHeightSizeMode.EnableResizing
'Ajustamos el alto para la columna cabecera
DataGridView1.ColumnHeadersHeight = _
DataGridView1.ColumnHeadersHeight * 2
' Ajuste la alineacin del texto en los encabezados de las
' columnas para que la visualizacin de texto en el centro de la parte inferior
DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = _
DataGridViewContentAlignment.BottomCenter
End Sub
Paso 2:
******
'Dibujamos las columnas
Private Sub DataGridView1_Paint(ByVal sender As System.Object, ByVal e As System.Win
dows.Forms.PaintEventArgs) Handles DataGridView1.Paint
' Datos para las celdas de cabezera
Dim Grupos As String() = {"GRUPO 1", "GRUPO 2"}
For j As Integer = 0 To DataGridView1.ColumnCount - 1 Step 2
' Obtener los lmites de encabezado de columna
Dim r1 As Rectangle = DataGridView1.GetCellDisplayRectangle(j, -1, True)
r1.X += 1
r1.Y += 1
r1.Width = r1.Width * 2 - 2
r1.Height = r1.Height / 2 - 2
Using br As SolidBrush = _
New SolidBrush(DataGridView1.ColumnHeadersDefaultCellStyle.BackColor)
e.Graphics.FillRectangle(br, r1)
End Using
Using p As Pen = New Pen(SystemColors.InactiveBorder)
e.Graphics.DrawLine(p, r1.X, r1.Bottom, r1.Right, r1.Bottom)
End Using
Using format As StringFormat = New StringFormat()
Using br As SolidBrush = New SolidBrush(DataGridView1.ColumnHeadersDefaultCell
Style.ForeColor)
format.Alignment = StringAlignment.Center
format.LineAlignment = StringAlignment.Center
e.Graphics.DrawString(Grupos(j / 2),
DataGridView1.ColumnHeadersDefaultCellStyle.Font, _
br, r1, format)
End Using
End Using
Next
End Sub
Paso 3:
******
'Dibujamos las celdas
Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal e As Sys
tem.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPaint
ing
If e.RowIndex = -1 AndAlso e.ColumnIndex > -1 Then
e.PaintBackground(e.CellBounds, False)
Dim r2 As Rectangle = e.CellBounds
r2.Y += e.CellBounds.Height / 2
r2.Height = e.CellBounds.Height / 2
e.PaintContent(r2)
e.Handled = True
End If
End Sub
Fuentes de Informacin
*******************
Recopilacin de distintas fuentes.
Mostrando varios encabezados de columnas combinados en un
DataGridView
Problema: Deseo tener, como en Microsoft Excel, un encabezado doble en dos columnas que
estn combinados.
De esta manera.
-----------------------------------------------------| Enero
|
Febrero
| Marzo
|
| Gan | Perdi | Gan | Perdi | Gan | Perdi |
-----------------------------------------------------|
|
|
|
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------Solucin: Se debe personalizar el evento Paint.
Para mayor entendimiento, pongo un ejemplo.
Tengo un formulario llamado Form1, el cual contiene un grid llamado DataGridView1.
En el evento load del formulario lleno el grid.
?
1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
2
3
'Lleno los datos del grid
With DataGridView1
.Columns.Add("", "Gan")
.Columns.Add("", "Perdi")
.Columns.Add("", "Gan")
.Columns.Add("", "Perdi")
8
9
.Columns.Add("", "Gan")
.Columns.Add("", "Perdi")
10
.ColumnHeadersHeightSizeMode =
11DataGridViewColumnHeadersHeightSizeMode.EnableResizing
12
.ColumnHeadersHeight = .ColumnHeadersHeight * 2
.ColumnHeadersDefaultCellStyle.Alignment =
DataGridViewContentAlignment.BottomCenter
13
14
End With
15
End Sub
Luego, se personaliza el evento Paint del DataGridView.
?
Private Sub dataGridView1_Paint(ByVal sender As System.Object, ByVal e As
1 System.Windows.Forms.PaintEventArgs) Handles DataGridView1.Paint
Dim monthes As String() = {"Enero", "Febrero", "Marzo"}
2
3
Dim j As Integer = 0
While j < 6
Dim r1 As Rectangle =
6 Me.DataGridView1.GetCellDisplayRectangle(j, -1, True)
7
r1.X += 1
r1.Y += 1
r1.Width = r1.Width * 2 - 2
9
10
r1.Height = r1.Height / 2 - 2
11
e.Graphics.FillRectangle(New
12SolidBrush(Me.DataGridView1.ColumnHeadersDefaultCellStyle.BackColor),
r1)
13
14
Dim format As New StringFormat()
15
16
17
format.Alignment = StringAlignment.Center
format.LineAlignment = StringAlignment.Center
18
e.Graphics.DrawString(monthes(j \ 2),
Me.DataGridView1.ColumnHeadersDefaultCellStyle.Font,
_
19
New
20SolidBrush(Me.DataGridView1.ColumnHeadersDefaultCellStyle.ForeColor),
21r1, format)
22
j += 2
End While
End Sub