martes, 8 de noviembre de 2011

Rellenar un DataGridView


Rellenar un DataGridView a partir de una base de datos Microsoft Access mediante un DataReader.

La intención es poder leer y filtrar los datos almacenados en una tabla de la Base de Datos.

Es resultado final esperado es el mostrado en la siguiente imagen:



Para ello se parte de un formulario en el que se incluyen dos Labels y dos Textbox para indicar el filtro a aplicar.

También se incluye un Button para aplicar el filtro.

Finalmente para albergar los datos se utiliza un control DataGridView.

Para simplificar el proceso y dado que se conoce de antemano el número de campos que devolverá la consulta a la Base de Datos, se añaden las columnas adecuadas en tiempo de diseño.


El proceso para agregar las columnas, implica acceder a las propiedades del control DataGridView1, Seleccionar la opción Columns, en la ventana que aparece, pulsar el botón Agregar.


Aparece una nueva ventana (Agregar columna), en la que se indicarán dos datos:
Nombre - Será el nombre de la columna, que nos servirá para acceder a ella mediante código.
Texto del encabezado - Será el texto que aparecerá en la cabecera de la columna.
Suele ser normal aplicar el mismo valor a estas dos propiedades, definiendo tanto el nombre como el texto al mismo valor.


El código para agregar filas al DataGrid es el siguiente:


    '7 - Mostrar valores del reader en el DataGridView
        DataGridView1.Rows.Clear()


        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))
        End While


En este código primero se eliminan las filas existentes.
DataGridView1.Rows.Clear()



Luego se ejecuta un bucle hasta que se llegue al final del lector que es un DataReader.
While lector.Read()


Dentro del bucle While se ejecuta el procedimiento Add que permite añadir filas en el DataGridView.
Recibe como parámetros una variable de tipo objeto con el contenido de cada celda de la fila a añadir.

DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ejemplo de código
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


'1 - Importar espacio de nombres
Imports System.Data.OleDb

Public Class Form1

    Public codigo_cliente As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '2 - crear conexion
        Dim conexion As New OleDbConnection

        '3 - cadena de conexion
        conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\factura_cliente.accdb;Persist Security Info=False;"

        '4 - abrir conexion
        conexion.Open()

        '5 - crear la sentencia SQL
        Dim comando_SQL As New OleDbCommand("SELECT * FROM Clientes WHERE Id_cliente BETWEEN " & TextBox1.Text & " AND " & TextBox2.Text & " ORDER BY Id_cliente", conexion)

        '6 - se crea el reader
        Dim lector As OleDbDataReader = comando_SQL.ExecuteReader

        ' *****************************************************************
        '7 - Mostrar valores del reader en el DataGridView
        DataGridView1.Rows.Clear()

        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            DataGridView1.Rows.Add(lector.GetValue(0), lector.GetValue(1), lector.GetValue(2), lector.GetValue(3), lector.GetValue(4))
        End While

        '**********************************************************************

        'punto final cerrar conexion
        conexion.Close()
    End Sub
End Class

2 comentarios:

  1. Buenas noches, Por favor si me pueden ayudar les estaré muy agradecido. Tengo un Form1, en el mismo 2 datagrid view y necesito pasar los datos del Data grid view1 que están enlazados a una base de datos Access. ¿Cómo puedo pasar una fila (con sus datos) al data grid view2, luego otra fila o las que quiera presionando doble clic o enter dendro de lata grid view1

    ResponderEliminar
    Respuestas
    1. Si te entiendo bien. lo que quieres es copiar contenido de un DataGridView en otro.

      Prueba el siguiente código:

      Public Class Form1

      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      DataGridView1.Rows.Add("Adan", "Alvarez", "5.00")
      DataGridView1.Rows.Add("Beatriz", "Bonagua", "7.75")
      DataGridView1.Rows.Add("Carlos", "Calderón", "3.00")
      DataGridView1.Rows.Add("Damian", "Dominguez", "10.00")

      End Sub

      Private Sub DataGridView1_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
      'uso CellDoubleClic en lugar de CellContentDoubleClic porque resulta mas comodo pinchar en la celda
      'que en su contenido

      DataGridView2.Rows.Add(DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(0).Value, _
      DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1).Value, _
      DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(2).Value)

      End Sub
      End Class

      En primer lugar, me quedo con el índice de la fila que deseo copiar, y en segundo lugar, añado una fila al segundo DataGridView, copiando un valor para cada celda de la columna.

      Espero que te sirva (en cuanto tenga un momento añadiré un post con nas imágenes para que quede más claro)

      Eliminar

Related Posts Plugin for WordPress, Blogger...