none
comment lié un textbox à un listbox RRS feed

  • Question

  • Je suis sur un projet à l'université.Il s'agit de creer une application permettant de gerer les vistes dans une clinique.J'ai donc un formulaire avec  un controle textbox et un listbox.L'application sera liée à une Base de donnée.Je veux savoir  comment afficher et filter les valeurs dans  le listbox en saisissant des données dans le textbox.

    EXple:Quand je tape "A" dans le textbox,les valeurs commencant par s'affiche dans le listbox.quand je tape "B" ensuite,les valeurs doivent etre encore trier selon "AB".
    Merci de votre Aide
    jeudi 19 novembre 2009 20:48

Réponses

  • j'ai fait  un exemple spécialement pour toi megaejay et il marche tres bien sans aucun probleme
    j'ai travaillé avec une table Modules 
    Public Class Form1
        Dim Con As New OleDb.OleDbConnection
        Dim Da As OleDb.OleDbDataAdapter
        Dim Ds As New DataSet
        Dim cmd As New OleDb.OleDbCommand
        Dim req As String
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Con.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\BaseEmploi.mdb"
            Con.Open()
    
        End Sub
        Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
            If Me.TextBox1.Text = "" Then
                Me.ListBox1.Items.Clear()
                Exit Sub
            End If
            ListBox1.Items.Clear()
            Ds.Clear()
            req = "Select LibelleMdl from Modules where LibelleMdl like '" & Me.TextBox1.Text & "%'"
            Da = New OleDb.OleDbDataAdapter(req, Con)
            Da.Fill(Ds, "AA")
            For i As Integer = 0 To Ds.Tables("AA").Rows.Count - 1
                Me.ListBox1.Items.Add(Ds.Tables("AA").Rows(i).Item(0))
            Next
        End Sub
    End Class
    • Proposé comme réponse MrH.Net mardi 24 novembre 2009 12:39
    • Marqué comme réponse Jean Yves Able jeudi 26 novembre 2009 12:18
    mardi 24 novembre 2009 12:38

Toutes les réponses

  • Bonjour,

    Tout simplement en liant votre ListBox à une source de données (DataSource) telqu'un DataTable ou une classe.
    A chaque saisie de l'utilisateur, il suffit d'executer la requête SQL qui va bien (SELECT * FROM MaTable WHERE Nom LIKE 'A%') et de mettre les données récupérés dans le DataSource de votre ListBox.

    Cordialement

    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 19 novembre 2009 21:19
    Modérateur
  • J'ai mis le code suivant sous l'evenement Changed du textbox :


    Dim con as oledb.oledbconnection = new oledb.oledbconnection
    con.connectionstring = " PROVIDER.Microsoft.Jet.OLEDB.4.0 ;Datasource = C://Documents and sttings/..../clinik2003.mdb "
    Dim mms As oledb.oledbcommand = con.createcommand()
    mms.commandText = " Select * from PATIENT where Nom_mld LIKE ' " textbox1.text +" % " ' order by Nom_mld "

    Try
    con.open()
    Catch ex as exception
    messageBox.show("connection Impossible! " & ex.tostring)
    Finally
    If textbox1.text<> " "  then
                    Dim traducteur as oledb.oledbDataReader = mms.executeReadeer()
    Do While   traducteur.Read
    Listbox1.Item.Add ( traducteur.GetValue(0).tostring + " " + traducteur.GetString(1) + " " + traducteur.Getstring(2)

    Loop
    traducteur.close
    con.close
    Textbox1.text(traducteur)

    Quand j"execcute ,je n'obtiens pas ce je souhaite c'est à dire afficher les valeurs par ordre de tri dans le listbox quand je saisis lescaracteres dans le textbox
    Merci D'avance
    vendredi 20 novembre 2009 11:03
  • j'ai pas du temps maintenanant j'ai un cours mais le soir on va discuter ton probleme 
    vendredi 20 novembre 2009 12:44
  • Aidez moi SVP,j'ai pas encore trouver la solution...
    samedi 21 novembre 2009 15:48
  • Dans un premier temps, je ne mettrais pas ca dans TextChanged mais dans KeyUp. Puis AcceptReturn à ton Textbox à True.
    Enfin, dans l'event KeyUp tu check si le caractère est Return:

    If e.KeyCode = vbCr Then Return

    Ensuite :

    If textbox1.text<> " "  then Return

    Dim con as oledb.oledbconnection = new oledb.oledbconnection
    con.connectionstring = " PROVIDER.Microsoft.Jet.OLEDB.4.0 ;Datasource = C://Documents and sttings/..../clinik2003.mdb "
    Dim mms As oledb.oledbcommand = con.createcommand()
    mms.commandText = " Select * from PATIENT where Nom_mld LIKE ' " textbox1.text +" % " ' order by Nom_mld "

    Dim traducteur as oledb.oledbDataReader
    Try
         con.open()
         traducteur= mms.executeReadeer()
         Do While   traducteur.Read
              Listbox1.Item.Add ( traducteur.GetValue(0).tostring + " " + traducteur.GetString(1) + " " + traducteur.Getstring(2)
        Loop
    Catch ex as exception
    messageBox.show("connection Impossible! " & ex.tostring)

    Finally
    Textbox1.text(traducteur)
         If traducteur IsNot Nothing then traducteur.close
         If con IsNot Nothing then con.close
    End Try
    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone
    dimanche 22 novembre 2009 11:04
  • L'emplacement ou la présence de : Textbox1.text(traducteur)  pose problème

    Le débogueur signale que la variable traducteur ne peut prendre de valeur string.
    Et quand je debogue sans en tenir compte,mon application ne marche pas quand je tape des valeurs dans le textbox.

    je rappelle que mon objectif est de creer une application(Gestion des visites d'une Clinique)  connecté à une Base de Donnés composée de 3 tables.
    une table PATIENT , une table VISITEUR,et une table VISITER qui permet de mettre en relation les 2 tables precedentes.

    J'ai créé 3 formulaires.
    Un  formulaire de Démarrage qui  comprend un textBox et un listBox.
    Il y a également  2 autres formulaires avec DatagridView

    Exemple: Quand je tape une lettre dans le textbox ,il doit afficher dans le listbox les valeurs de la table Visiteur commencant par cette lettre.

    Merci
    mardi 24 novembre 2009 08:24
  • j'ai fait  un exemple spécialement pour toi megaejay et il marche tres bien sans aucun probleme
    j'ai travaillé avec une table Modules 
    Public Class Form1
        Dim Con As New OleDb.OleDbConnection
        Dim Da As OleDb.OleDbDataAdapter
        Dim Ds As New DataSet
        Dim cmd As New OleDb.OleDbCommand
        Dim req As String
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Con.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\BaseEmploi.mdb"
            Con.Open()
    
        End Sub
        Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
            If Me.TextBox1.Text = "" Then
                Me.ListBox1.Items.Clear()
                Exit Sub
            End If
            ListBox1.Items.Clear()
            Ds.Clear()
            req = "Select LibelleMdl from Modules where LibelleMdl like '" & Me.TextBox1.Text & "%'"
            Da = New OleDb.OleDbDataAdapter(req, Con)
            Da.Fill(Ds, "AA")
            For i As Integer = 0 To Ds.Tables("AA").Rows.Count - 1
                Me.ListBox1.Items.Add(Ds.Tables("AA").Rows(i).Item(0))
            Next
        End Sub
    End Class
    • Proposé comme réponse MrH.Net mardi 24 novembre 2009 12:39
    • Marqué comme réponse Jean Yves Able jeudi 26 novembre 2009 12:18
    mardi 24 novembre 2009 12:38
  • Merci MrH.Net ,ça marche .mais c'est un seule colonne de la table qui s'affiche.
    En faitC'est une application de gestion de clinique.j'aimerais  afficher dans le listbox,outre le nom( j'ai utilisé la
    proprieté nom_mld pour ecrire  la requete SQL),d'autres proprietés importantes telles que le prenom.

    Exemple : quand je tape A dans le textbox,le listbox doit afficher en plus du nom(proprieté utilisée dans la requete SQL) la proprieté numro_chbr sur la meme ligne dans la collection.

    Remarque: Dans ce que tu as poster ,la declaration suivante:
    Dim
     cmd As
     New
     OleDb.OleDbCommand


    n'a pa deffet sur le programme.je ne sais pa pourkoi tu l'a mis.
    Encore Merci
    jeudi 26 novembre 2009 12:17
  • Bonjour,

    Comme on a déjà répondu, c'est pas pour dire, mais la listBoxe fait déjà ce que tu veux faire, suffit de taper deux caractères rapidement et t'es à peu près sur ton nom, voire dessus.
    Sinon, généralement on fait le contraire, on cherche le nom dans un liste puis on affiche le reste correspondant dans du texte ; parce que : saisir un texte pour aller le chercher dans une liste pour aller le chercher dans des fichiers, heu... certes, là, si j'ai tout compris y a un objet en trop.

    Concernant la validation, si le <return> est conforable en fin de saisie pour ceux qui ont l'habitude, la philosophie Microsoft c'est "action + validation", donc, si dans une liste ça remplit les deux condition, avec un textbox généralement on valide une saisie par un bouton.

    Pour résumer, la conception me semble "particulière", enfin, c'est toi qui vois, disait l'aveugle :o)

    Cordialement.

    Joe.
    • Proposé comme réponse irolog dimanche 14 février 2010 21:32
    jeudi 26 novembre 2009 13:32
  • N'est-ce pas possible de travailler avec un dataView et utiliser sa propriété RowFilter pour éviter de nombreux appels à la DB ? Il me semble que la performance s'en trouve ainsi accrue. Mais je peux me tromper...
    jeudi 26 novembre 2009 16:57
  • pour oledb.oledbcomande j'ai pas fait attention 
    et pour les autres informations c'est a toi de chercher 
    tu peux mettre une DataGridView , y aura pas beaucoup de changements 
    jeudi 26 novembre 2009 21:04
  • Et bien en terme de performance, tu auras beaucoup de changements...
    vendredi 27 novembre 2009 19:40