none
autocompletado no desde primera letra del item en vb.net RRS feed

  • 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.
    miércoles, 3 de diciembre de 2014 21:01

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!!!

    miércoles, 3 de diciembre de 2014 21:06
  • Hola , gracias por responder, quisiera hacerlo desde una lista genérica
    miércoles, 3 de diciembre de 2014 21:31
  • 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!!!

    jueves, 4 de diciembre de 2014 0:46
  • 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
    jueves, 4 de diciembre de 2014 2:49