none
WPF filter string RRS feed

  • Pregunta

  • hola foro porfavor ayuda con este codigo:

    Private Sub btnBuscar_Click(sender As Object, e As RoutedEventArgs)
            Dim cvTasks As ICollectionView = CollectionViewSource.GetDefaultView(lista.ItemsSource)
            cvTasks.Filter = New Predicate(Of Object)(AddressOf Contains)
        End Sub

        Public Function Contains(ByVal de As Object) As Boolean
            Dim order As DietaEntity = TryCast(de, DietaEntity)
            Return order.NombreCompleto = txtBuscar.Text
        End Function

    de esta forma puedo filtrar, colocando el nombre completo,

    pero deseo filtrar colocando algunos datos que contenga la  cadena

    sábado, 5 de marzo de 2022 19:50

Todas las respuestas

  • deseo filtrar colocando algunos datos que contenga la  cadena

    Cambia esto:

    Return order.NombreCompleto = txtBuscar.Text

    por esto:

    Return order.NombreCompleto.Contains(txtBuscar.Text)

    Esto busca los registros cuyo NombreCompleto contenga lo que se haya introducido en el txtBuscar. Soo lo busca "de una vez", es decir, no puedes poner en el txtBuscar varias palabras y que busque lo que contenga una de ellas. Para esto habría que complicar más la función Contains (hacer un Split del txtBuscar y aplicar Contains con un bucle a cada una de las partes).

    Ten presente que el "Contains" de la clase String es sensible a mayúsculas y minúsculas. Si no quieres que lo sea, puedes fácilmente conseguirlo aplicando ToLower al texto a buscar y al texto buscado.

    sábado, 5 de marzo de 2022 21:27
  • lo encontre, era facil solucionarlo, aqui esta el codigo como queria:

     Public Function Contains(ByVal de As Object) As Boolean
            Dim order As DietaEntity = TryCast(de, DietaEntity)
            Return order.NombreCompletoDelInterno.StartsWith(txtBuscar.Text)
        End Function

    sábado, 5 de marzo de 2022 22:01
  • Negativo, joven Sra. o Srta. Anabelen. El método StartsWith() como dice su nombre devuelve true si el string COMIENZA con su argumento. Da lo mismo que con lo anterior, para dar true tendría que ser igual, lo mismo si usas el contrario, EndsWith(). Tal como dijo el maestro Alberto, el método a usar es Contains(), que da true si el argumento se encuentra en cualquier lugar del string, y tal como dijo, aunque no lo detalló, se puede extender la comprobación a varias partes del Text separadas por espacios, tal como lo podes ver en este ejercicio similar propuesto por el joven Sr. Danny.

    Filtro por TextBox en varias partes a 2 campos

    La idea y explicación es la misma, sólo que vos tenes un único campo a filtrar. Sería:

    return txtBuscar.Text.Trim().Split(' ').Any(s => order.NombreCompletoDelInterno.Contains(s));

    Devuelve true si alguna (o más) de las partes del Text (que puede ser una sola) está contenida en NombreCompletoDelInterno. No estoy seguro como se traduce eso (lambda o como **tz* se llame) a VB, disculpame.

    Otra cosa que se me ocurre, sería que podrías pasarle al método un DietaEntity directamente, en lugar de un object y luego convertirlo ... excepto que yo desconozca totalmente y ese método deba tener un prototipo (firma o forma) determinado para poder ser asignado a la propiedad Filter de la colección.

    Espero te resulte útil

    Saludos

    Pablo

    domingo, 6 de marzo de 2022 1:00