none
Realizar consulta, búsqueda y/o filtro en base de datos SQL Server según el texto escrito desde un Combobox RRS feed

  • Pregunta

  • Que tal amigos, pues vengo a pedirle ayuda a la comunidad aprovechando su conocimiento, desde ya gracias de antemano.

    Bueno, pues tengo poco de empezar a utilizar WPF y en estos momentos me encuentro probando y aprendiendo sobre este tema, el caso es que tengo una aplicación empleando C# y LinQ, en la cual hago una conexión a una base de datos SQL Server 2008. En una de las ventanas tengo un DataGrid, algunos TextBox y un par de Combobox, he probado llenar el DataGrid con datos que obtengo de 2 tablas de la base de datos mediante LinQ, también he probado insertar desde las cajas de texto a una tabla en la base de datos y todo me va bien, el problema viene ahora...

    Necesito hacer búsquedas/consultas de datos contenidos en una de las tablas de la BD, usando uno de los combobox, no se si me explico, por ejemplo, necesito que cuando yo teclee en el combobox "usb 2gb" se haga un filtro de todos los datos en la tabla de la BD que contengan tales palabras y/o letras, y al borrar el contenido del combobox, este se llene con todos los elementos contenidos en la tabla, que únicamente me filtre según lo contenido al momento de teclear en el combobox, esto para evitar buscar en una lista enorme de elementos contenidos en el combobox, y tener la opción de teclear parte del nombre y hacer un filtro para encontrar fácilmente el elemento que se necesita.

    He usado la propiedad IsEditable="True" y IsTextSearchEnabled="True" para que sea posible introducir texto en el combobox, y también utilizo el evento KeyUp="filtro" del combobox, en donde "filtro" es el nombre del método que utilizo para que se ejecute la consulta a la BD cuando es tecleado un texto en el combo.

    Este es el metodo que se ejecuta con el evento KeyUp del combobox:

    private void filtro(object sender, System.Windows.Input.KeyEventArgs e){
    
    combProd.ItemsSource = from prod in conex.Producto
                                     where prod.Nombre.Contains(combProd.Text)
                                       select prod.Nombre;
    }
    

    donde "comboProd" es el nombre del combobox, "conex" mi DataContext y mi tabla en la base de datos es "Producto".

    El problema con este código es que logro generar el filtro, pero solo si tecleo la primer letra del elemento, no filtra los datos si tecleo una de las letras del centro del nombre, es decir, supongamos que en la BD tengo "USB Marca", si tecleo en el combo "U" me aparece el nombre correctamente, pero si tecleo "S" o "M" no me muestra nada, además de este problema solo me muestra un solo elemento en el filtro y no todos los que contengan parte del texto escrito en el combo.

    Espero haber sido claro, y que alguno de ustedes pueda orientarme para lograr lo que intento hacer, estaré atento a sus comentarios y respuestas, muchas gracias y saludos. :D

    martes, 9 de octubre de 2012 8:07

Todas las respuestas

  • Hola Fozziepupus.

    He probado con las indicaciones que das y funciona correctamente, de todas formas para ver por donde tirar, puedes probar lo siguiente:

                combProd.ItemsSource = from prod in conex.Producto
                                       where prod.Nombre.Contains("S")
                                       select prod.Nombre;

    Crea esta consulta y pon un punto de interrupcion en ella, cuando se ejecute mira los resultados del ItemSource para ver los valores que te retorna, en un principio te deberia de retornar todos los que contengan la 'S', si esto es asi, tienes algun problema en el combo y si no te retorna los valores esperados, el problema esta en el enlace a datos.

    Comenta donde esta el problema y vemos que hacer.

    Yo he probado con un combo basico:

            <ComboBox IsEditable="True" IsTextSearchEnabled="True" Height="23" 
                          HorizontalAlignment="Left" Name="combProd"
                          VerticalAlignment="Center" Width="120" KeyUp="firstNameComboBox_KeyUp"></ComboBox>


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/


    miércoles, 10 de octubre de 2012 21:31