ListView Avanzado

Uso de Vistas
Manejo de los datos del Item seleccionado

Fecha: 28/Junio/2005 (28 de Junio de 2005)
Autor: Ing. Fernando Luque Sánchez - DCE 4 Estrellas

[email protected]


Sres. Desarrolladores, este ejemplo trata de mostrar el uso del control ListView, además de incluir un ContextMenu para permitir al usuario seleccionar la Vista que desee de este. Lo artículos antes publicados respecto a este mismo control son:

El control ListView –Parte I:    http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListView.htm

El control ListView (II):   http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListViewII.htm

En una cuarta parte manejaré el control enlazado a una base de datos en SQL Server y otro con el uso del control TreeView.

UN POCO DE TEORIA

El control ListView es un control muy versatil, permite mostrar un conjunto de datos de manera tabular similar al control DataGrid y tambien mostrar sus elementos con las opciones similares a las vistas del Explorador de Windows: Detalle, Iconos Grandes, Iconos Pequeños y Lista, para conseguir esto se modifica la propiedad View.

El Control ListView se puede enlazar al control ImageList para determinar el ícono de cada elemento, tanto para las opciones de Vista: Iconos Grandes e Iconos Pequeños, las propiedades a cambiar son LargeImageList para Iconos Grandes y SmallImageList para Iconos Pequeños.

Algunas propiedades importantes:

Propiedad Descripción
AllowColumnReorder Indica si el usuario puede reordenar las columnas
CheckBoxes Indica si se muestran casillas de verificación
FullRowSelect Indica si al seleccionar un Item se marcan todos los SubItems del elemento seleccionado
GridLines Muestra las líneas en la vista Details
MultiSelect Permite la selección de Multiples Items
View Cambia la Vista
LabelEdit Permite que el usuario modique directamente las etiquetas de los elementos.
Columns Columnas que se mostrarán en la vista Detalle (Details)
Items Identificador de cada elementos del ListView
SubItems Conjunto de elementos que dependen del Item

 

NUESTRO EJEMPLO

En el ejemplo que comparto con ustedes les incluyo dos controles ListView, el primero con 4 elementos incluídos con la vista Detalle por defecto, este primer ListView tiene especificados las propiedades SmallImageList y LargeImageList y también un menú contextual para cambiar la vista del control.

El botón Copiar copia los elementos seleccionados a un array y luego los incluye en el segundo ListView, si bien es cierto pueden hacerlo directamente, hago esto debido a una consulta que me hicieron por el correo, ¿COMO PUEDO COPIAR LOS DATOS DEL LISTVIEW A OTRO FORMULARIO?, me parece que contanto con un array definido en un módulo es sumamente sencillo conseguir esto. En otro envio trabajaré con datos extraido de una base de datos de SQL Server.

A continuación sigue código en Visual Basic:

    Private Sub Cargar(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        LlenarListview()
        FormatoGridCopiados()

    End Sub

    'Procedimiento para formatear el ListView
    Sub LlenarListview()
        lsvDatos.GridLines = True
        lsvDatos.FullRowSelect = True

       'Encabezados
        lsvDatos.Columns(0).Text = "Id. Empleado"
        lsvDatos.Columns(1).Text = "Nombre"
        lsvDatos.Columns(2).Text = "Edad"
        lsvDatos.Columns(3).Text = "Dirección"

        'Ancho de cada Columna
        lsvDatos.Columns(0).Width = 100
        lsvDatos.Columns(1).Width = 200
        lsvDatos.Columns(2).Width = 50
        lsvDatos.Columns(2).TextAlign = HorizontalAlignment.Right
        lsvDatos.Columns(3).Width = 280

        'Llenar algunos Items en el ListView
        'EN LA PARTE PRACTICA...REAL LOS SACAMOS DE UN DataTable 
        'Los datos de la familia....la razón de mi esfuerzo
        'con esas direcciones no me encontrarán.....je,je,je...

        lsvDatos.Items.Add("FL3049", 0)
        lsvDatos.Items(0).SubItems.Add("Ing. Fernando Luque Sánchez")
        lsvDatos.Items(0).SubItems.Add("39")
        lsvDatos.Items(0).SubItems.Add("Av. Brasil 567 Lima")

        lsvDatos.Items.Add("CVA049", 1)
        lsvDatos.Items(1).SubItems.Add("Carolina Villacorta de Luque")
        lsvDatos.Items(1).SubItems.Add("39")
        lsvDatos.Items(1).SubItems.Add("Av. Angamos Oeste 466")
 

        lsvDatos.Items.Add("FLV456", 2)
        lsvDatos.Items(2).SubItems.Add("Fernando Luque Villacorta")
        lsvDatos.Items(2).SubItems.Add("8")
        lsvDatos.Items(2).SubItems.Add("Av. Larco 906 Miraflores")

        lsvDatos.Items.Add("MFL012", 3)
        lsvDatos.Items(3).SubItems.Add("María Fernanda Luque Villacorta")
        lsvDatos.Items(3).SubItems.Add("4")
        lsvDatos.Items(3).SubItems.Add("Canaval y Moreyra 499 La Molina")
    End Sub

    Sub FormatoGridCopiados()
        lsvSelec.GridLines = True
        lsvSelec.FullRowSelect = True

        'Encabezados
        lsvSelec.Columns(0).Text = "Id. Empleado"
        lsvSelec.Columns(1).Text = "Nombre"
        lsvSelec.Columns(2).Text = "Edad"
        lsvSelec.Columns(3).Text = "Dirección"
        'Ancho de cada Columna
        lsvSelec.Columns(0).Width = 100
        lsvSelec.Columns(1).Width = 200
        lsvSelec.Columns(2).Width = 50
        lsvSelec.Columns(2).TextAlign = HorizontalAlignment.Right
        lsvSelec.Columns(3).Width = 280
    End Sub

El código completo está en el archivo adjunto. Recuerda votar en mi PanoramaBox, los puntos me alientan a seguir publicando, y gracias a ustedes por su preferencia. Suerte a todos

Ing. Fernando Luque Sánchez
CIP 61806
Trujillo - Perú


Espacios de nombres usados en el código de este artículo:

System.Windows.Forms


Fichero con el código de ejemplo: FernandoLuque_ListViewAvanzado.zip - Tamaño 14 KB


ir al índice