Usuario
WPF filter string

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 Functionde esta forma puedo filtrar, colocando el nombre completo,
pero deseo filtrar colocando algunos datos que contenga la cadena
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.
-
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 -
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