none
LLENAR LISTVIEW CON CONSULTA MYSQL RRS feed

  • Pregunta

  • Buenas tengo un listwiew que necesito llenar con todos los registros de la tabla articulos, lo he conseguido a medias porque cuando cargo los datos se tarda demasiado, no me muestra los encabezados de columna ni las lineas pero además me llena dos registros en una misma fila por lo que todo queda desordenado: ejemplo

    MAN001 Manguerilla de inflador 1 600 MAN002 Manguerilla moto 20 600

    y lo que necesito mostrar es

    CODIGO        DESCRIPCIÓN          CANTIDAD     PRECIO

    MAN001 Manguerilla Inflador            1              600,00

    MAN002 Manguerilla moto               20             600,00

    el código que tengo es el siguiente:

    Try

                Dim Cadena_de_Conexion As String = "server=localhost; database=ciclo; user id=root; password=xxxxxx"
                ConsultaSql = "SELECT * From Articulos"

                ' Configuramos una conexión con el origen de datos.
                Using Conexion_a_la_Base As New MySqlConnection(Cadena_de_Conexion) 'Using Conexion_a_la_Base
                    Conexion_a_la_Base.Open()

                    Dim Comando_de_Consulta As New MySqlCommand(ConsultaSql, Conexion_a_la_Base) 'cmd
                    Dim Tabla_de_Articulos As MySqlDataReader

                    Tabla_de_Articulos = Comando_de_Consulta.ExecuteReader

                    While Tabla_de_Articulos.Read()
                        ListView1.Items.Add(CStr(Tabla_de_Articulos("Codigo_Articulo")))
                        ListView1.Items.Add(CStr(Tabla_de_Articulos("Nombre_Articulo")))
                        ListView1.Items.Add(CLng(Tabla_de_Articulos("Cantidad")))
                        ListView1.Items.Add(CLng(Tabla_de_Articulos("Precio")))
                    End While

                End Using 'Using Conexion_a_la_Base

            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    Agradezco mucho su ayuda

    lunes, 21 de noviembre de 2016 1:25

Respuestas

  • Frank Jarquin,

    ¿Cómo agregas las columnas del objeto ListView1?

    Deberías tener algo como lo siguiente:

    - Configurar el objeto ListView1:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	'Configurar ListView
    	listView1.View = View.Details
    	listView1.FullRowSelect = True
    
    	'Agregar columnas
    	listView1.Columns.Add("CÓDIGO")
    	listView1.Columns.Add("DESCRIPCION")
    	listView1.Columns.Add("CANTIDAD")
    	listView1.Columns.Add("PRECIO")
    End Sub


    - Agregar datos:

    Try
    	Dim Cadena_de_Conexion As String = "server=localhost; database=ciclo; ..."
    	ConsultaSql = "SELECT * FROM Articulos"
    	
    	Using cn As New MySqlConnection(Cadena_de_Conexion)
    		cn.Open()
    
    		Dim cmd As New MySqlCommand(ConsultaSql, cn)
    		
    		Dim reader As SqlDataReader = cmd.ExecuteReader
    
            If reader.HasRows Then
    			While reader.Read()
    				Dim lvItem As New ListViewItem(New String() {
                                           reader.GetString(0),
                                           reader.GetString(1),
                                           reader.GetString(2),
                                           reader.GetString(3)})
    				ListView1.Items.Add(lvItem)				
    			End While			
            Else
    			ListView1.Items.Clear()
            End If
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    Finalmente, analiza utilizar la clase DataGridView para trabajar con datos.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Marcado como respuesta Frank Jarquin lunes, 21 de noviembre de 2016 2:17
    lunes, 21 de noviembre de 2016 1:50

Todas las respuestas

  • Hola Frank Jarquin,

    No has pensado en usar un DataGridView en vez de un ListView ? Ya que el DGV está diseñado para cargar grandes volúmenes de datos. Además, si cargas los datos mediante el DataSource el mediante la consulta te generará las columnas, o es necesario usar el LV ?

    Si solo vas a consultar unos datos usando el 'Select campo1, campo2, etc .. from miTabla' solo bastaría usar el MySqlDataAdapter y el resultado lo almacenas en un DataTable.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 21 de noviembre de 2016 1:42
  • Frank Jarquin,

    ¿Cómo agregas las columnas del objeto ListView1?

    Deberías tener algo como lo siguiente:

    - Configurar el objeto ListView1:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	'Configurar ListView
    	listView1.View = View.Details
    	listView1.FullRowSelect = True
    
    	'Agregar columnas
    	listView1.Columns.Add("CÓDIGO")
    	listView1.Columns.Add("DESCRIPCION")
    	listView1.Columns.Add("CANTIDAD")
    	listView1.Columns.Add("PRECIO")
    End Sub


    - Agregar datos:

    Try
    	Dim Cadena_de_Conexion As String = "server=localhost; database=ciclo; ..."
    	ConsultaSql = "SELECT * FROM Articulos"
    	
    	Using cn As New MySqlConnection(Cadena_de_Conexion)
    		cn.Open()
    
    		Dim cmd As New MySqlCommand(ConsultaSql, cn)
    		
    		Dim reader As SqlDataReader = cmd.ExecuteReader
    
            If reader.HasRows Then
    			While reader.Read()
    				Dim lvItem As New ListViewItem(New String() {
                                           reader.GetString(0),
                                           reader.GetString(1),
                                           reader.GetString(2),
                                           reader.GetString(3)})
    				ListView1.Items.Add(lvItem)				
    			End While			
            Else
    			ListView1.Items.Clear()
            End If
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    Finalmente, analiza utilizar la clase DataGridView para trabajar con datos.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Marcado como respuesta Frank Jarquin lunes, 21 de noviembre de 2016 2:17
    lunes, 21 de noviembre de 2016 1:50
  • Muchas gracias Williams Morales, realmente prefiero el uso del listview porque aprovecho la característica de que con sólo escribir las primeras letras de la primera columna, en este caso el código, me busca inmediatamente y me ubica en el artículo o los artículos con código similar y no tengo que programar nada.

    Estoy empezando a comprender un poquito el lenguaje VB.NET, hace ya bastante tiempo dejé de programar en Visual 6.0 y ahora todo me es bastante diferente en este lenguaje.

    Gracias el código me funcionó perfecto, me queda la duda si puedo ponerle color a las lineas del listview y también como darle formato de miles y dos decimales al precio a la hora de mostrarlo en el listview. 10.000,00

    lunes, 21 de noviembre de 2016 2:17
  • Frank Jarquin,

    Te recomiendo una vez mas que estudies la clase DataGridView de hecho tiene mayor funcionalidad que la clase ListView dado que su objetivo es mostrar -o contener- datos, incluso la funcionalidad de búsqueda que mencionas.

    Respecto a dar color a las líneas (imagino que te refieres a las filas)  es simple, podrías dar un color alterno, algo como:

    For Each row As ListViewItem In ListView1.Items
    	row.BackColor = If(row.Index Mod 2 = 0, Color.LightSkyBlue, Color.White)
    Next

    Y para dar formato podrías hacerlo al momento de asignar el valor:

    '...
    reader.GetDecimal(3).ToString("#,##0.00")


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 21 de noviembre de 2016 4:31