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