Usuario
autocompletado no desde primera letra del item en vb.net

Pregunta
-
Hola quisiera saber si me pueden ayudar con un autocomplete en un combobox que no solo me permita filtrar desde la primera letra del item sinó desde cualquier letra que coincida con mi búsqueda y me muestre los item que la contienen en vb.net , desde ya muchas gracias por su ayuda
- Cambiado Enrique M. Montejo sábado, 6 de diciembre de 2014 17:00 Pregunta relacionada con controles de Windows Forms.
Todas las respuestas
-
Hola:
Lo que deseas se puede lograr solo que para ofrecerte una respuesta mas acertada deberias de especificar que es lo que deseas filtrar, directamente desde la BD?, DataTable?, Lista generica?, archivo XML?...
Saludos desde Monterrey, Nuevo León, México!!!
-
-
Hola:
Bien, entonces podrías intentar lo siguiente:
1. Antes de establecer el DataSource del combobox, aterriza la lista genérica a una lista local
2. Después crea un método que reciba un parámetro de entrada del tipo string y que devuelva una Lista genérica del mismo tipo que tu lista original, dentro podrías poner un return con una linea similar a la siguiente:
Dim myFilteredList = From l In myList Where l.Description.ToLower().Contains(ParamValue.ToLower())l
3. Utilizas esta función como DataSource de tu control:
Ejemplo a grades rasgos:
''Este fragmento supone que es la entrada principal de datos de tu ComboBox Private Sub Form1_Load(...) ''Se supone que existe un objeto myList declarado previamente a nivel del Form 'igualamos las listas myList = MyinitiaList; ' ' Establecemos el DataSoruce del ComboBox1 CombBox1.DataSource = MyinitiaList; End Sub ' 'Usamoe el evento TextChanged del contro para aplicar el filtro Private Sub ComboBox1_TextChanged(...) Dim textValue As String = ComboBox1.Text CombBox1.DataSource = ApplyFilter(textValue) End Sub Private Function ApplyFilter(ByVal myFilterValue As String) As List(Of MyClase) ''Ojo con el Contains que es el que realiza el filtro a tu lista, si tu deseas que el filtro se realice con la primer letra entonces cambia ''este por StartWithValue Return (From l In myList Where l.Description.ToLower().Contains(myFilterValue.ToLower())l).ToList() End Function
Nota: El ejemplo de codigo, es solo eso, un ejemplo y no garantizo su correcto funcionamiento ya que fue creado desde el NotePad, pero la logica que sigue es lo que deberias de considerar para aplicarlo a tu caso.
Saludos desde Monterrey, Nuevo León, México!!!
-
lo hice de esta manera , pero en la función ApllyFilter me da un error de que un valor sistem.generic no s epuede convertir en sistem.generic
Public Class Form1 Dim MyinitiaList As New List(Of String) Dim mylist As New List(Of String) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MyinitiaList.Add("daniel cevallos") MyinitiaList.Add("Laysy Velez") mylist = MyinitiaList Combo.DataSource = MyinitiaList End Sub Private Sub Combo_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Combo.TextChanged Dim textValue As String = Combo.Text Combo.DataSource = ApplyFilter(textValue) End Sub Private Function ApplyFilter(ByVal myFilterValue As String) As List(Of Form1) Return (From l In mylist Where l.Contains(myFilterValue.ToLower())).ToList() End Function End Class
- Editado libro64 jueves, 4 de diciembre de 2014 2:49