miércoles, 9 de diciembre de 2009

Desplazarte por un ListView a través de código

En este artículo voy a comentar como podemos a través de código desplazarnos por un control ListView , en modo "DetailsView" * , en una aplicación Windows Form, y de esta forma similiar los botones de desplazamiento de un recordset. Indicando también que solo se va a permitir la selección de un único elemento.

En primer lugar, vamos a definir una variable que va a permitirnos controlar en que elemento nos encontramos en cada momento.

private intElementoSeleccionado as integer = -1

A continuación, vamos a definir una función que se va a encargar de limpiar los elementos seleccionados del listview, se indicará que el elemento referenciado por el índice (intElementoSeleccionado) está seleccionado y tiene el foco, y además ponemos el foco en el control listview (lvwLista).

Private Sub Cambiar_Elemento()
lvwLista.SelectedItems.Clear()
lvwLista.Items(intElementoSeleccionado).Selected = True
lvwLista.FocusedItem = lvwLista.Items(intElementoSeleccionado)
lvwLista.Focus()
End Sub
A continuación, tendremos que crear los botones de desplazamiento, en mi caso tengo 4 botones: Ir al primer Registro, Ir al Registro anterior, Ir Al siguiente Registro e Ir al Último Registro.

Para el botón "Ir al primer Registro", vamos a establecer el valor de
"intElementoSeleccionado" a 0, para indicar que es el primer registro.

intElementoSeleccionado=0

Para el botón "Ir al Registro Anterior", vamos a disminuir en "1" el valor de "intElementoSeleccionado", teniendo en cuenta que el valor no puede ser inferior a 0.

If intElementoSeleccionado > 0 Then intElementoSeleccionado -= 1

Para el botón "Ir al siguiente Registro", vamos a incrementar el valor de "intElementoSeleccionado" de 1 en 1, comprobando que el valor no es superior al número de elementos del ListView.

If intElementoSeleccionado < lvwLista.Items.Count - 1 Then intElementoSeleccionado += 1
Para el botón "Ir al último Registro", vamos a establecer el valor de "intElementoSeleccionado" al número de elementos de nuestro ListView para indicar que es el primer registro.

intElementoSeleccionado=lvwLista.Items.Count - 1


Además de estas líneas anteriores, en cada uno de los botones vamos a tener que hacer una llamada a nuestra función "Buscar", para que "automáticamente" nos lleve a cabo nuestra selección del registro.

*El ejemplo es válido también para otros modos del ListView.

Espero que os sea útil.

Un saludo.

2 comentarios:

  1. Buenas amigo... tu código me ayudo mucho, pero me da un problema: al darle click al botón "ir al siguiente" se mueve al siguiente elemento, pero al hacer click en "ir al anterior" en vez de hacerlo se ejecuta como si fuera "ir al siguiente"... debo hacer click dos veces para que funcione bien. Esto ocurre también al contrario...

    ResponderEliminar
  2. He visto su intervención sobre el tema del Listview y me he decidido a preguntarle sobre el tema ya que hasta este momento he sido incapaz de solucionarlo.
    Tengo una función que recorre un ListView para cargar una tabla en Access, dos son los registro que tiene que cargar de los cuatro que filtro pero solo me carga el primero. Y dado que soy incapaz de dar con el código de registro siguiente he decidido pedir ayuda.

    Sub bolcarListView()
    Dim i As Integer, e As Integer
    Dim colum As Integer = ds.Tables(0).Columns.Count - 1
    Dim matriz(colum) As String
    For i = 1 To listaDatos.Items.Count
    For e = 0 To colum
    matriz(e) = Convert.ToString(listaDatos.Items(0).SubItems(e).Text)
    Next
    objClien.InsertaReg("Clientes", matriz, cn)
    'avanzar registro
    Next
    End Sub

    Gracias caso de poderme ó no ayudarayudar y un saludo

    ResponderEliminar