Quantcast
Channel: Ayuda con ListView
Viewing all articles
Browse latest Browse all 4

Ayuda con ListView

$
0
0

Hola:

Si tu intención es rellenar un control ListView con los datos existentes en un objeto DataTable, lo mejor que puedes hacer es crearte una nueva clase que herede del control ListView, y añadirle una nueva propiedad que admita un objeto DataTable, que sea la encargada de rellenar de datos el control ListView. Dicha propiedad, bien podría llamarse «DataSource», como la tienen muchos otros controles de .NET, como el control DataGridView, ListBox, ComboBox, etc.

La nueva clase podría ser la siguiente:

Imports System.ComponentModel

''' <summary>
''' Clase extendida para el control ListView.
''' </summary>
''' <remarks></remarks>
Public Class ListViewEx

    Inherits ListView

    Private m_dataSource As DataTable

    ''' <summary>
    ''' Establece y devuelve el origen de datos del
    ''' control ListView.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Browsable(False)> _
    Public Property DataSource() As DataTable
        Get
            Return m_dataSource
        End Get
        Set(ByVal value As DataTable)

            m_dataSource = value

            ' Limpiamos el control ListView
            Me.Items.Clear()
            Me.Columns.Clear()

            ' Si el valor no es Nothing, rellenamos
            ' el control ListView.
            '
            If (Not (m_dataSource Is Nothing)) Then _
                Fill(m_dataSource)

        End Set

    End Property

    Private Sub Fill(ByVal dt As DataTable)

        With Me

            ' Iniciamos la carga de datos
            .BeginUpdate()

            ' Añadimos las columnas
            '
            For Each col As DataColumn In dt.Columns
                .Columns.Add(col.ColumnName, 100, HorizontalAlignment.Left)
            Next col

            For Each row As DataRow In dt.Rows

                Dim values() As Object = row.ItemArray

                Dim item As New ListViewItem(values(0).ToString())

                .Items.Add(item)

                ' Añadimos los elementos
                '
                For index As Integer = 1 To values.Length - 1
                    item.SubItems.Add(values(index).ToString())
                Next

            Next row

            ' Finalizamos la carga de datos
            '
            .EndUpdate()

            ' Indicamos cómo se visualizarán los elementos
            '
            .View = View.Details

        End With

    End Sub

End Class

Una vez que generes tu proyecto, en lugar de utilizar un control ListView, arrastra a tu formulario desde el Cuadro de Herramientas, un control ListViewEx.

Para rellenar el control, simplemente ejecutarías lo siguiente:

       Try
            ListViewEx1.DataSource = GetData()

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

        End Try

Observa que a la propiedad DataSource del control ListViewEx, se le asigna el valor devuelto por un método llamado «GetData». Este método sería el encargado de conectarse con tu base de datos, y devolver un objeto DataTable como resultado de ejecutar la consulta SQL de selección que desees:

    Private Function GetData() As DataTable

        Try
            Using cnn As New MySqlConnection(cadena_conexión)

                Dim sql As String = "SELECT * FROM NombreTabla"

                Dim da As New MySqlDataAdapter(sql, cnn)

                Dim dt As New DataTable("Tabla")

                da.Fill(dt)

                Return dt

            End Using

        Catch ex As Exception
            Throw

        End Try

    End Function

Fíjate de que manera tan fácil, rellenamos el objeto ListView con los datos de un objeto DataTable.

Ahora bien, si a pesar de lo indicado no deseas crear una nueva clase que herede del control ListView, estudia el código fuente existente en el método Fill de la clase ListViewEx, y lo comparas con el código fuente que tú estás ejecutando, para ver donde falla tu código para que solamente se muestre un único registro.

Un saludo

 


Enrique Martínez [MS MVP - VB]

Viewing all articles
Browse latest Browse all 4


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>