DataGridView

Este es un potente control para mostrar datos por pantalla, tiene muchisimas opciones, trataremos de ver un ejemplo simple y luego mencionaré todo lo que yo uso cuando trabajo con un DataGridView.

'Conexión a la base de datos y obtención de los registros en un DataTable
Dim cnn As New SqlConnection
cnn.ConnectionString = _
"Data Source=..\SQLEXPRESS; Initial Catalog=BasedePrueba; 
Integrated Security=True"

'Algunas lineas de este código tuvieron que ser divididas
'por no entrar en ekl ancho de pantalla.

cnn.Open()

Dim ds As New DataSet
Dim da As New SqlDataAdapter

Dim sql As String
sql = "Select * from SaldosClientes"
da.SelectCommand = New SqlCommand(sql, cnn)
da.Fill(ds)
cnn.Close()

'con esta linea obtengo un objeto DataTable 
'(dt) con los registros resultantes
Dim dt As DataTable = ds.Tables(0)

'Ahora puedo asignar el DataTable (dt) al DataGridView1
DataGridView1.DataSource = dt

Con el código anterior alcanza para llenar nuestro primer DataGridView. Ahora veremos que mas se puede hacer con este control.

'Definimos que fuente usar
DataGridView1.Font = _
    New Drawing.Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point

'Que columnas estarán visibles
DataGridView1.Columns("Id").Visible = False
DataGridView1.Columns("Codigo").Visible = True
DataGridView1.Columns("RazonSocial").Visible = True
DataGridView1.Columns("Fecha").Visible = True
DataGridView1.Columns("Saldo").Visible = True

'Cual sera el orden de las columnas
DataGridView1.Columns("Id").DisplayIndex = 0
DataGridView1.Columns("Codigo").DisplayIndex = 1
DataGridView1.Columns("RazonSocial").DisplayIndex = 2
DataGridView1.Columns("Fecha").DisplayIndex = 3
DataGridView1.Columns("Saldo").DisplayIndex = 4

'Ancho de columnas
DataGridView1.Columns("Id").Width = 100
DataGridView1.Columns("Codigo").Width = 100
DataGridView1.Columns("RazonSocial").Width = 100
DataGridView1.Columns("Fecha").Width = 100
DataGridView1.Columns("Saldo").Width = 100

'El encabezado de las columnas
DataGridView1.Columns("Id").HeaderText = "Id"
DataGridView1.Columns("Codigo").HeaderText = "Código"
DataGridView1.Columns("RazonSocial").HeaderText = "Razón Social"
DataGridView1.Columns("Fecha").HeaderText = "Fecha"
DataGridView1.Columns("Saldo").HeaderText = "Saldo"

'La alineación de las celdas de cada columna
DataGridView1.Columns("Id").DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.BottomRight

DataGridView1.Columns("Codigo").DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.BottomLeft

DataGridView1.Columns("RazonSocial").DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.BottomLeft

DataGridView1.Columns("Fecha").DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.BottomLeft

DataGridView1.Columns("Saldo").DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.BottomRight


'La alinación del encabezado de cada columna
DataGridView1.Columns("Id").HeaderCell.Style.Alignment = _
DataGridViewContentAlignment.BottomRight

DataGridView1.Columns("Codigo").HeaderCell.Style.Alignment = _
DataGridViewContentAlignment.BottomLeft

DataGridView1.Columns("RazonSocial").HeaderCell.Style.Alignment = _
DataGridViewContentAlignment.BottomLeft

DataGridView1.Columns("Fecha").HeaderCell.Style.Alignment = _
DataGridViewContentAlignment.BottomLeft

DataGridView1.Columns("Saldo").HeaderCell.Style.Alignment = _
DataGridViewContentAlignment.BottomRight

'El formato de las columnas numéricas
DataGridView1.Columns("Saldo").DefaultCellStyle.Format = "##,##0.00"

Bueno, pasé mucho tiempo buscando todas estas opciones de configuración para dejar un DataGridView como me gustaba. Espero que les sea util y en breve estaré subiendo mas acerca de este gran control de datos.



24 Responses to “DataGridView”

  1. [...] 12, 2009 Hoy quiero mostrarles un sencillo ejemplo de como conectarse a SQL Server y llenar un DataGridView, pero sin escribir ni una sola línea de código. Es decir que haremos todo arrastrando y soltando [...]

  2. JOSE LUIS PEREZ dice:

    Gracias,

    Estos ejemplos son muy buenos sobre todo con la simpleza que los explicas.

    Felicidades.

  3. Jose dice:

    Muy buena tu explicación, pero me gustaría saber si puedes ayudarme, a ver como hacerlo en forma inversa, es decir, teniendo los datos en un DataGridView (Ejemplo 1 fila y 4 columnas), agregarlo a una nueva fila de una base de datos de las mismas caracteristicas (1 fila, 4 columnas), apreciaré mucho tu ayuda. Gracias.

  4. david C. dice:

    Gracias por el ejemplo de llenado y configuracion del datagridview, me sirvio bastante.

  5. Rodrigo Cáceres dice:

    Felicitaciones, simple y sencillo…un ejemplo a imitar

  6. GONZALO HACKER ROOT dice:

    GRAIAS POR LA INFORMACION ESTA MUY BIEN EXPLICADO ME HA SERVIDO DE MUCHO GRACIAS POR TU AYUDA.

    :-)

  7. ALEXANDER dice:

    HEY GRACIAS POR LA INFORMACION SIGUE ASI, EXCELENTEMENTE EXPLICADO Y DE VERDAD FUNCIONAL PARA NOSOTROS LOS PROGRAMADORES QUE UTILIZAMOS EL DATAGRID CON FRECUENCIA

  8. juan osuna dice:

    Hola tengo una duda que me corroe hace dias,
    como averiguo el indice de la fila que tengo seleccionada en un datagridview.
    para poder pasarla aun formulario y me enseñe los datos en el formulario completos me estoy volviendo loco

  9. DarkRex dice:

    Muy bueno
    pero me gustaría saber como hago para validar los datos ingresados en una celda del datagridview columna tipo fecha así como se hace en un maskeditbox.

  10. Nathalia Gomez dice:

    Y para realizar toda clase de validacion

  11. gino sanclemente dice:

    hola a todos.. quisiera q me ayudara ya q estoy trabajando con un datagridview q contiene un objeto datagridviewcomboboxcolumn ai les va el codigo para ver si me ayudan a encontrar el error o lo q le haga falta: Private Sub BtnAddRequisito_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAddRequisito.Click
    Dim sConexion As String = Negocio.Conexion
    Dim Ds_datos As New DataSet
    Dim sQuery As String CboRequisitoColumn.Name = “Materia”
    Me.DGVMaterias.Columns.Add(CboRequisitoColumn)
    sQuery = “SELECT asg_codigo as codigo, asg_nombre as descripcion FROM spsatbasignatura where asg_semestre<" & Me.CMBSemestre.Text Ds_datos = Accesar_Datos.GetDataSet(sQuery, sConexion)
    my_DGVCboColumn.DataSource = Ds_datos.Tables(0)
    my_DGVCboColumn.Name = "Datos"
    my_DGVCboColumn.DisplayMember = Ds_datos.Tables(0).Columns("descripcion").ToString
    my_DGVCboColumn.ValueMember = Ds_datos.Tables(0).Columns("codigo").ToString Me.DGVMaterias.Columns.RemoveAt(0)
    Me.DGVMaterias.Columns.Insert(0, my_DGVCboColumn)
    End Sub'el anterior crea los grid
    'el siguiente es donde quiero
    'asignar o insertar el codigo q me da el
    'objeto my_DGVCbocolumn q se encuentra dentro de DGVMaterias xq creo yo q no debo
    'hacer referencia a CboRequisitoColumnPrivate Sub Agregar_Requisitos()
    Dim sQuery As String = ""
    Dim sConexion As String = Negocio.Conexion
    Dim Ds_Datos As New DataSet
    Dim KROW As Integer = 0
    Dim aux As String
    Dim r As Integer Try For KROW = 0 To Me.DGVMaterias.RowCount – 1
    aux = Me.my_DGVCboColumn.Items(KROW).ToString
    r = CType(aux, Integer)
    sQuery = "spi_spsatbrequisito_asignatura " & Codigo & "," & r & ""
    Ds_Datos = Accesar_Datos.GetDataSet(sQuery, sConexion)
    Next KROW
    Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
    End TryEnd Sub' de antemano gracias

  12. Mode dice:

    Hola. Gracias por este post tan útil. Me estaba volviendo loco intentando adivinar como dar una alienación distinta a cada columna. El caso es que he puesto el código correspondiente en el evento Load del form que tiene el dataGrid y me da error. Me dice que hago referencia a un objeto que no existe. Alguien sabe porqué es esto? Quizás debo poner el código en otro procedimiento de evento diferente? Gracias.

  13. Mel86 dice:

    Hola.. espero que leas este comment.. Me gustaria saber que propiedad del datagrid me captura un no. de ID de cliente al darle clic.

    Elemplo… si yo busco personas que viven en X lugar y me aparecen 2 en el datagrid, al darle doble clic en la celda del registro que quiero me llena Varios textbox con los datos. Lo que no hace es que al darle a los 2 registros me busca los datos del ultimo regustro no del primero o tercero.. GRACIAS use un ciclo en el evento C1_CellDoubleClick (datagrid)
    For x As Integer = 0 To (C1.RowCount – 2)
    Label3.Text = C1.Item(0, x).Value
    Next

  14. Enrique dice:

    Hola! soy nuevo en esto de los DataGridView,
    estoy trabajando con Visual Stuio 2008,

    Mi DUDA es:

    Tengo un DataGridView y le estoy pasando los datos por medio de un “PictureBox” (producto, precio, catidad y total)
    al darle CLICK al la 1era imagen, llena las celdas y con un “ImputBox” me pide la cantidad y hace la operacion (precio * cantida = total)

    Pero…

    Al hacer lo mismo con la imagen que sigue, o bien, con la misma imagen, Siempre me pone los DATOS en la misma FILA!

    Como puedo hacerle para que por cada vez k le de un CLCK a las IMAGENES me ocupe la fila que sigue…?

    Agradeceria mucho este aporte!!

  15. Jaime Mombiela dice:

    Muchas Gracias.
    Muy buenos ejemplos.

  16. JOSE dice:

    saludos amigo, gracias por el codigo

  17. Guillermo Fernando Illanes Caceres dice:

    Muchisimas gracias por el aporte, hace días vengo buscando un ejemplo así, lo adapte a mi código y compilo muy bien..

  18. Jordi dice:

    Me gustaria saber si el control datagridview permite agrupar varias filas que tengan un campo en comun. Se puede Hacer?

    Gracias

  19. MARCELO dice:

    TENGO UNA DUDA CON LA GRIDWIEV, CAMBIO LA QUERY Y NO ME CARGA LA GRILLA EN PANTALLA, QUE PUEDE SER LO QUE ME ESTE AFECTANDO ???

    SALUDOS Y GRACIAS

  20. Isa dice:

    Muchas gracias ¡me ha servido demasiado!

  21. juan dice:

    ni entiendo aun con esta buena explicacion, y mañana esel semestral, deseenme suerte xD

Comentar