lineas en datagridview

09/03/2007 - 15:25 por david | Informe spam
hola, estoy desarrollando en vs 2005, tengo alguna forma de poner el numero
de linea en la columna de la izquierda del datagridview, la que tiene la
flecha que marca la fila en la que te encuentras?? Gracias.
 

Leer las respuestas

#1 Luis Miguel Blanco
09/03/2007 - 19:49 | Informe spam
Hola David

Es perfectamente posible conseguir la funcionalidad que comentas. Para ello
puedes utilizar el evento CellPainting del control DataGridView, escribiendo
en el método manipulador de dicho evento, todas las operaciones necesarias
para realizar el dibujo personalizado de los elementos que necesites, en este
caso concreto de las celdas correspondientes a las cabeceras de fila del
control.

Además de dibujar el número de fila correspondiente, por el mismo precio,
puedes añadir a la celda un bonito efecto de fundido de colores en dos
estados: cuando la fila esté o no seleccionada, para este caso concreto debes
utilizar al comienzo del archivo de código la siguiente declaración:

Imports System.Drawing.Drawing2D

A continuación te adjunto un bloque de código con un ejemplo de cómo podrías
abordar el problema.

'//////////////////////////////////////
Private Sub DataGridView1_CellPainting(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles
DataGridView1.CellPainting
' objeto para crear un efecto de fundido de colores
Dim oLGB As LinearGradientBrush
' variable para guardar el número de fila a dibujar
Dim sNumFila As String

' comprobamos si la columna a pintar es la de cabecera de fila
If e.ColumnIndex < 0 AndAlso e.RowIndex >= 0 Then
' crear un objeto brush con fundido de colores:
' si la celda de cabecera de fila está seleccionada
If (e.State And DataGridViewElementStates.Selected) = _
DataGridViewElementStates.Selected Then

oLGB = New LinearGradientBrush(e.CellBounds, _
Color.LightSkyBlue, Color.MediumVioletRed, _
LinearGradientMode.ForwardDiagonal)
Else
' si la celda de cabecera de fila no está seleccionada
oLGB = New LinearGradientBrush(e.CellBounds, _
Color.HotPink, Color.PaleTurquoise, _
LinearGradientMode.Horizontal)
End If

' calcular el número de fila a mostrar en la columna
' de cabeceras de fila
sNumFila = (e.RowIndex + 1).ToString()

' pintar el rectángulo de la celda y rellenarlo con el degradado
e.Graphics.FillRectangle(oLGB, e.CellBounds)
e.Graphics.DrawRectangle(New Pen(Color.Gold, 1), e.CellBounds)

' calcular el tamaño del número a dibujar
Dim oSizeTexto As Size = TextRenderer.MeasureText(sNumFila,
e.CellStyle.Font)

' dibujar dentro de la celda de cabecera el número de fila
TextRenderer.DrawText(e.Graphics, _
sNumFila, _
e.CellStyle.Font, _
e.CellBounds, _
e.CellStyle.ForeColor)

' puesto que hemos controlado nosotros el proceso
' de pintado hay que hacérselo saber al control
' estableciendo el siguiente flag
e.Handled = True
End If
End Sub
'//////////////////////////////////////

Y esto sería todo, espero que te sirva de ayuda.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"david" wrote:

hola, estoy desarrollando en vs 2005, tengo alguna forma de poner el numero
de linea en la columna de la izquierda del datagridview, la que tiene la
flecha que marca la fila en la que te encuentras?? Gracias.

Preguntas similares