miércoles, 9 de noviembre de 2011

Rellenar un DataGridView

En este ejemplo se muestra como rellenar un DataGridView, a partir de una tabla, sin haber creado con anterioridad las columnas.

Se parte de un formulario en el que se incluye un DataGridView, sin configurar ninguna columna.

Tanto las columnas como las filas serán anexadas mediante código.



El resultado final será un DataGridView, que contendrá todas las columnas que devuelva la consulta a la base de datos. Incluyendo la posibilidad de añadir otras mediante código.


ACLARACIÓN:


En el caso de conocer cuantas columnas nos devolverá la consulta se pueden añadir de una en una con la instrucción DataGridView1.Columns.Add, pasandole como parámetro el nombre de cada columna, y el texto que aparecerá en la cabecera de la misma.
Suele ser habitual que ambos sean iguales, aunque no es imprescindible.

Con esto se puede recuperar el nombre de la tabla:
DataGridView1.Columns.Add(lector.GetName(0), lector.GetName(0))

O también se puede asignar el nombre que se desee:
DataGridView1.Columns.Add("Nombre columna", "Texto Cabecera Columna")

En caso de no conocer cuantas columnas devolverá la consulta, es posible realizar un bucle que añada columnas hasta alcanzar el valor indicado por el lector, en la propiedad FieldCount.

For i As Integer = 0 To lector.FieldCount - 1
      DataGridView1.Columns.Add(lector.GetName(i), lector.GetName(i))
Next

En cuanto al proceso de rellenar las filas se pueden añadir como se mostró en el ejemplo anterior o utilizando una tabla de cadenas de caracteres.
En el detalla se muestra esta solución:

 DataGridView1.Columns.Add("Importe", "Importe")
        Dim tabla_cadenas(lector.FieldCount) As String
        While lector.Read()
            'Se añade una fila al grid con un string por cada columna
            For j As Integer = 0 To lector.FieldCount - 1
                tabla_cadenas(j) = lector.GetValue(j).ToString
            Next
            DataGridView1.Rows.Add(tabla_cadenas)
        End While

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

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

Public Class Form5

    Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '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 Lineas_factura WHERE Numero_factura_fk = " & Form2.factura_numero, conexion)

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

        ' *****************************************************************
        '7 - Mostrar valores del reader en el DataGridView
        DataGridView1.Rows.Clear()
        'DataGridView1.Columns(0).HeaderText = lector.GetName(0)
        'DataGridView1.Columns.Add(lector.GetName(0), lector.GetName(0))
        'DataGridView1.Columns.Add(lector.GetName(1), lector.GetName(1))
        'DataGridView1.Columns.Add(lector.GetName(2), lector.GetName(2))
        'DataGridView1.Columns.Add(lector.GetName(3), lector.GetName(3))
        'DataGridView1.Columns.Add(lector.GetName(4), lector.GetName(4))

        'Otra opción de añadir columnas
        For i As Integer = 0 To lector.FieldCount - 1
            DataGridView1.Columns.Add(lector.GetName(i), lector.GetName(i))
        Next

        DataGridView1.Columns.Add("Importe", "Importe")

        Dim tabla_cadenas(lector.FieldCount) As String

        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))

            For j As Integer = 0 To lector.FieldCount - 1
                tabla_cadenas(j) = lector.GetValue(j).ToString
            Next

            DataGridView1.Rows.Add(tabla_cadenas)

        End While

        'punto final cerrar conexion
        conexion.Close()

        Dim total_factura As Single
        Dim parcial_factura As Single

        'Se restan 2 a DataGridView1.Rows.Count para descartar la línea en blanco
        For i As Integer = 0 To DataGridView1.Rows.Count - 2
            parcial_factura = CSng(DataGridView1.Rows(i).Cells(3).Value) * CSng(DataGridView1.Rows(i).Cells(4).Value)
            total_factura += parcial_factura
            DataGridView1.Rows(i).Cells(5).Value = parcial_factura
        Next

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

        TextBox1.Text = Form2.factura_numero
        TextBox2.Text = Form2.factura_fecha
        TextBox4.Text = Form1.codigo_cliente
        TextBox5.Text = Form1.dato_Nombre_fiscal
        TextBox6.Text = Form1.dato_Cif
        TextBox7.Text = Form1.dato_Direccion
        TextBox3.Text = Form1.dato_Nombre_comercial
        TextBox5.Text = Form1.dato_Nombre_fiscal

        TextBox8.Text = total_factura.ToString
    End Sub

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

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...