elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Buscar en un listview y resaltar item
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Buscar en un listview y resaltar item  (Leído 7,151 veces)
nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Buscar en un listview y resaltar item
« en: 22 Mayo 2015, 02:29 am »

Hola como estan.

La consulta que tengo es como buscar en un listiview(Control telerik) se como buscar en un control de winform de echo es el codigo que he modificado pero no se por que no me busca.

Este es el codigo que tengo
Código
  1. Dim i As Integer
  2.        'obtiene el número de elementos del componente
  3.        For i = 0 To lvPagosProveedores.Items.Count
  4.            'Obtiene el indice en base a 0 del elemento seleccionado
  5.            lvPagosProveedores.SelectedIndex = i
  6.            'verifica que el elemento selecionado del control sea igual al que esta escrito en el textBox
  7.            If lvPagosProveedores.SelectedItem.Selected = txtBuscarPagoProvee.Text Then
  8.                'Establece el nuevo indice del control
  9.                lvPagosProveedores.SelectedIndex = i
  10.                'lvPagosProveedores.Focus()
  11.                Exit For
  12.            Else
  13.                RadMessageBox.Show(Me, "Ese codigo no existe", "Informacion",
  14.                                      MessageBoxButtons.OK, RadMessageIcon.Info)
  15.            End If

El problema es que no me busca bien siempre regresa al primer item si se fijan busco 5 pero siempre me muestra 1 en indice


Saludos.


En línea

Lo que se puede imaginar... se puede programar.
seba123neo


Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: Buscar en un listview y resaltar item
« Respuesta #1 en: 22 Mayo 2015, 04:10 am »

podes usar FindItemWithText para hacer una busqueda simple de texto.

Código
  1. Dim item As ListViewItem = Nothing
  2. item = Me.ListView1.FindItemWithText("texto a buscar", False, 0)
  3.  
  4. Me.ListView1.SelectedItems.Clear()
  5.  
  6. If item Is Nothing Then
  7. MessageBox.Show("No se encontro.")
  8. Else
  9. item.Selected = True
  10. item.EnsureVisible()
  11. Me.ListView1.Select()
  12. End If

saludos.


En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.701



Ver Perfil
Re: Buscar en un listview y resaltar item
« Respuesta #2 en: 22 Mayo 2015, 04:33 am »

podes usar FindItemWithText para hacer una busqueda simple de texto.

El problema es que este control de terceros no tiene un método similar (o al menos yo desconozco que haya alguna función parecida a FindItemWithText de un Listview común).

Una forma de resolver el problema sería así:

Código
  1.    ''' <remarks>
  2.    ''' *****************************************************************
  3.    ''' Snippet Title: Find Item Extended for Telerik RadListView.
  4.    ''' Author       : Elektro
  5.    ''' Date Modified: 22-May-2015
  6.    ''' *****************************************************************
  7.    ''' </remarks>
  8.    ''' <summary>
  9.    ''' Find and returns all the <see cref="ListViewDataItem"/> occurrences that matches the specified criteria.
  10.    ''' </summary>
  11.    ''' <typeparam name="ItemType">The <see cref="Type"/> of the data to find.</typeparam>
  12.    ''' <param name="lv">The <see cref="RadListView"/>.</param>
  13.    ''' <param name="itemIndex">The index of the item to search on.</param>
  14.    ''' <param name="find">The data to find.</param>
  15.    ''' <returns><see cref="IEnumerable(Of ListViewDataItem)"/>.</returns>
  16.    Friend Shared Iterator Function FindItemEx(Of ItemType)(ByVal lv As RadListView,
  17.                                                            ByVal itemIndex As Integer,
  18.                                                            ByVal find As ItemType) As IEnumerable(Of ListViewDataItem)
  19.  
  20.        For Each lvItem As ListViewDataItem In lv.Items
  21.  
  22.            Dim item As Object = lvItem.Item(itemIndex)
  23.  
  24.            If (TypeOf item Is ItemType) AndAlso (DirectCast(item, ItemType).Equals(find)) Then
  25.                Yield lvItem
  26.            End If
  27.  
  28.        Next lvItem
  29.  
  30.    End Function

Modo de empleo:
Código
  1.    Private Sub Button1_Click() Handles Button1.Click
  2.  
  3.        With lvPagosProveedores
  4.            .Columns.Add("column1")
  5.            .Columns.Add("column2")
  6.  
  7.            .Items.Add({"1", "2"})
  8.            .Items.Add({"3", "4"})
  9.            .Items.Add({5, 6})
  10.            .Items.Add({5, 6})
  11.            .Items.Add({True, False})
  12.        End With
  13.  
  14.        Dim lvItems As IEnumerable(Of ListViewDataItem) =
  15.            FindItemEx(Of Integer)(lv:=lvPagosProveedores, itemIndex:=0, find:=5)
  16.  
  17.        Select Case lvItems.Count
  18.  
  19.            Case Is = 0
  20.                RadMessageBox.Show(lvPagosProveedores.FindForm,
  21.                                   "Ese codigo no existe", "Informacion",
  22.                                   MessageBoxButtons.OK, RadMessageIcon.Info)
  23.  
  24.            Case Else
  25.                With lvPagosProveedores
  26.                    .SuspendLayout()
  27.  
  28.                    .MultiSelect = True
  29.                    .SelectedIndex = .Items.IndexOf(lvItems.Last)
  30.                    .Select(lvItems.ToArray)
  31.                    .Focus()
  32.  
  33.                    .ResumeLayout()
  34.                End With
  35.  
  36.        End Select
  37.  
  38.    End Sub

Saludos
« Última modificación: 22 Mayo 2015, 05:31 am por Eleкtro » En línea


nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Buscar en un listview y resaltar item
« Respuesta #3 en: 22 Mayo 2015, 05:44 am »

Hola Elecktron, seba123neo

Muchas gracias a ambos por responder.

Para ser sincero no creo que lo hubiera resuelto.

Código
  1. Dim lvItems As IEnumerable(Of ListViewDataItem) =
  2.            FindItemEx(Of Integer)(lv:=lvPagosProveedores, itemIndex:=0, find:=5)

solo cambien en la parte de find por la entrada del textbox

Código
  1. Dim lvItems As IEnumerable(Of ListViewDataItem) =
  2.            FindItemEx(Of Integer)(lv:=lvPagosProveedores, itemIndex:=0, find:=txtBuscarPagoProvee.Text)

Te adjunto una imagen


Muchas gracias por el tiempo a ambos.

Aunque las gracias esa poco.

Saludos.

PD: Me llevo tiempo entender algunas cosas pero ya esta : ).
« Última modificación: 22 Mayo 2015, 05:59 am por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.701



Ver Perfil
Re: Buscar en un listview y resaltar item
« Respuesta #4 en: 22 Mayo 2015, 06:04 am »

Para ser sincero no creo que lo hubiera resuelto.

1. La propiedad Selected es booleana e indica si el item está seleccionado... obviamente ibas muy mal encaminado por que aquí estás comparando True o False con un String:
Código
  1. ...
  2. 'verifica que el elemento selecionado del control sea igual al que esta escrito en el textBox
  3. If lvPagosProveedores.SelectedItem.Selected = txtBuscarPagoProvee.Text Then
  4. ...
(Usa IntelliSense para leer la descripción de cada miembro/propiedad).

2. Lo cierto es que a pesar de ese fallo el problema lo podrías haber resuelto sin ayuda, recuerda lo que te expliqué en otro post sobre la propiedad Key y la función FindItemByKey, puedes aplicar esa misma metodología a un RadListView, y eso solucionaría el problema, es decir, añades cada item con una 'Key' que contenga su código del pedido, y luego usas la función RadListView.FindItemByKey().

Saludos!
En línea


nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Buscar en un listview y resaltar item
« Respuesta #5 en: 22 Mayo 2015, 06:31 am »

Hola de hecho probé el findKey de ese método

Parecido a lo que a lo del otro post como mencionas

Pero en lo que me fije que cuando se agrega el item al listview se le agrega la llave, y en este caso muestro los datos en el listview con un Query a la BD no sé si aun así se le puede asignar una llave a los item del listview eso me confundió un poco, pero claro que lo probé por que hace la búsqueda y compara si existe o no, así que es casi lo mismo que mencionas.

Que seria esta parte:

Donde le agregas la llave al campo articulo.

Código
  1. ElseIf Me.lvListaPedidos.FindItemByKey(key:=articulo.ToLower, searchVisibleItems:=True) IsNot Nothing Then
  2.            RadMessageBox.Show("El articulo ya existe en la lista.", "", MessageBoxButtons.OK, RadMessageIcon.Error)
  3.  
  4. Else
  5.            Dim lvItem As New ListViewDataItem(text:="", values:={articulo, cantidad, total}) With
  6.        {.Key = articulo.ToLower}
  7.            Me.lvListaPedidos.Items.Add(lvItem)
  8. End If
  9.  

En el caso de la busqueda deberia de asignar una llave por cada item a la columna no??
Oh antes de cargar los datos le asigno la llave?

Corrigeme si estoy mal en algo por favor.

Saludos.
« Última modificación: 22 Mayo 2015, 06:47 am por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.701



Ver Perfil
Re: Buscar en un listview y resaltar item
« Respuesta #6 en: 22 Mayo 2015, 07:35 am »

en este caso muestro los datos en el listview con un Query a la BD no sé si aun así se le puede asignar una llave a los item del listview eso me confundió un poco, pero claro que lo probé por que hace la búsqueda y compara si existe o no, así que es casi lo mismo que mencionas.

Uf, me ha costado un poco descubrir la respuesta a tu pregunta, cómo ya te dije no soy ningún gurú de Telerik, quizás el siguiente código se pueda simplificar (imagino que Telerik ofrecerá algo más "accesible" que estar leyendo la cantidad de items cada vez), he ido un poco a ciegas pero esto es lo que conseguí hacer:

Código
  1.    ''' <summary>
  2.    ''' Handles the <see cref="RadListView.ItemCreating"/> event of the <see cref="lvPagosProveedores"/> control.
  3.    ''' </summary>
  4.    ''' <param name="sender">The source of the event.</param>
  5.    ''' <param name="e">The <see cref="ListViewItemCreatingEventArgs"/> instance containing the event data.</param>
  6.    Private Sub LvPagosProveedores_ItemCreating(sender As Object, e As ListViewItemCreatingEventArgs) _
  7.    Handles lvPagosProveedores.ItemCreating
  8.  
  9.        e.Item.Key = e.Item.Owner.Items.Item(e.Item.Owner.Items.Count - 1).Item(0).ToString
  10.  
  11.    End Sub

De esa manera lo que hago es asignar de forma automatiada la "key" a cada item que se añada al radlistview, a la "key" le asigno el mismo valor que la primera celda (.Item(0)) del item actual, que sería el "código de pedido" en tu caso.

Espero que te sirva.

En el caso de la busqueda deberia de asignar una llave por cada item a la columna no??
Oh antes de cargar los datos le asigno la llave?

No te entendí bien, cómo ya digo el procedimiento es el mismo, añadir un item al radlistview, asignarle una llave a ese item, y buscar por la llave.

Intuyo que estás utilizando un datasource así que deberías aplicar una asignación de llaves automatizada como en el código que he mostrado, con eso debería funcionarte bien.

Saludos!
« Última modificación: 22 Mayo 2015, 07:43 am por Eleкtro » En línea


nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Buscar en un listview y resaltar item
« Respuesta #7 en: 22 Mayo 2015, 08:06 am »

Funciono también solo que primero hay que llenar el listview y después ejecutar el evento, si no muestra un error algo como esto Index was out of range.

Pero sirvió por medio de llaves.

Gracias sé que no eres un Guru de Telerik. (Aunque no lo creo)

Pero cualquier idea de cómo tratar de hacerlo se agradece enormemente

Muchas gracias de nuevo Eleкtro

Disculpa las molestias.

Saludos.

PD: uso un DateTable para no traer el nombre de las columnas de la BD pero funciona tambien por medio de llaves. : )))
« Última modificación: 22 Mayo 2015, 08:11 am por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duplicar un item en un listview
Programación Visual Basic
Snort 8 2,564 Último mensaje 23 Diciembre 2006, 16:13 pm
por Snort
ListView item and Elapse time
Programación Visual Basic
ntaryl 2 1,807 Último mensaje 19 Febrero 2010, 21:29 pm
por ntaryl
Identificador para item de listview
ASM
.:UND3R:. 4 2,287 Último mensaje 18 Mayo 2013, 00:55 am
por .:UND3R:.
Seleccionar un Item de un Listview y darle click derecho
Programación Visual Basic
jack06 2 1,650 Último mensaje 12 Noviembre 2017, 19:45 pm
por okik
Ayuda, buscar y resaltar la palabras de un RichTextBox
.NET (C#, VB.NET, ASP)
**Aincrad** 8 3,182 Último mensaje 27 Noviembre 2017, 22:07 pm
por **Aincrad**
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines