IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

probleme de Refresh


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 324
    Par défaut probleme de Refresh
    bonjour
    je recherche le moyen de réactualiser mes combobox en fonction du choix qui été fait dans le combo précedent.

    en plus clair

    dans le combo 1 qui est composé d'une liste de 7 items
    si je choisi le N°1, celui ci ne doit plus apparaitre dans la liste du combo 2,
    et si je choisi le N°3 dans le combo N°2 celui ci ne doit plus apparaitre dans les autres combo et ainsi de suite

    Je vous joint une partie du code que j'ai déja fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     Private Sub UpdateFeuille()
     
     
      '''''''''''''''''''''''''''''
            ' Alimentation du combo 1
            '''''''''''''''''''''''''''''
     
            Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Application.StartupPath & "\gestionjoueurs.mdb;")
            Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
     
            Mycommand.CommandText = "SELECT T_Joueur.IDJoueur,T_Joueur.Nom, T_Joueur.Prenom, T_Joueur.Dispo,T_Joueur.Init , T_Joueur.Pilier from T_Joueur where (T_Joueur.Dispo=1 and T_Joueur.Pilier=true and T_Joueur.Init=true)"
     
            MyConnexion.Open()
     
            Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
     
            ComboBox1.Items.Clear()
     
            Do While myReader.Read()
     
                strIdentifiant = CStr(myReader.GetValue(0))
                intLong = strIdentifiant.Length
                strIdentifiant = ""
                If intLong < 4 Then
                    Dim i As Integer
                    For i = 1 To (5 - intLong)
                        strIdentifiant = strIdentifiant & " "
                    Next
                    strIdentifiant = strIdentifiant & CStr(myReader.GetValue(0))
                    strNomPrenom = strIdentifiant & " :" & myReader.GetString(1) & " " & myReader.GetString(2)
     
                End If
     
                ComboBox1.Items.Add(strNomPrenom)
     
     
            Loop
            myReader.Close()
     
            MyConnexion.Close()
            Me.Refresh()
     
     Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim MyConnexion2 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Application.StartupPath & "\gestionjoueurs.mdb;")
            Dim Mycommand2 As OleDbCommand = MyConnexion2.CreateCommand()
     
            strToto = Mid(Me.ComboBox1.Text, 1, 5)
     
            If strToto <> "" Then
                If CInt(strToto) > 0 Then
     
                    Mycommand2.CommandText = ("UPDATE T_JOUEUR SET INIT=false WHERE IdJoueur=") & CInt(strToto)
     
                    MyConnexion2.Open()
     
                    Dim myReader2 As OleDbDataReader = Mycommand2.ExecuteReader()
                    MyConnexion2.Close()
     
                End If
            End If
     
        End Sub
    La selection doit se faire par rapport a une info qui est mise a false dans une table acces

    Merci pour votre aide
    @+
    Philippe

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    en utilisant Contains et RemoveAt ca doit être assez simple

  3. #3
    Membre éclairé
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 324
    Par défaut
    et bien merci pour la reponse. Mais dans vb2005, je ne vois pas ou est ce que je peut placer ce code dans la partie du code ci dessus.

    je suis un debutant et je ne comprend pas tout du premier coup "il me faut surement un refreh a moi aussi"

    alors un petit peux tu me donner plus de détails.

    merci
    Philippe

  4. #4
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    par exemple pour virer l'élément selectionner de combobox1 dans combobox2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            If ComboBox1.SelectedIndex > -1 Then
                Me.ComboBox2.Items.RemoveAt(Me.ComboBox2.FindStringExact(Me.ComboBox1.SelectedItem.ToString))
            End If
        End Sub

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Par défaut
    Citation Envoyé par philguio
    et bien merci pour la reponse. Mais dans vb2005, je ne vois pas ou est ce que je peut placer ce code dans la partie du code ci dessus.
    Fait une fonction qui enleve un élement defini d'une combo à l'aide de ce qu'a ecrit bidou et utilise cette fonction dans les evenements de chacunes des combobox à chaque fois que la valeur selectionnée change.

  6. #6
    Membre éclairé
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 324
    Par défaut
    bonsoir,
    mes combobox sont alimentés par des infos lues dans une table acces. Chaque fois que je selectionne un nom je change la valeur init ,(qui est par defaut 1 ) je la changes en 0. Le probléme est que ma BDD ne se réinitialise pas et donc je retrouve la valeur choisie dans les autres combo. Je cherche donc une methode pour reinitialiser ma table a chaque fois que je change de combo

    Il y a un exemple de code plus haut

    Merci à tous par avance
    @+
    Philippe

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Par défaut
    Citation Envoyé par philguio
    Le probléme est que ma BDD ne se réinitialise pas et donc je retrouve la valeur choisie dans les autres combo. Je cherche donc une methode pour reinitialiser ma table a chaque fois que je change de combo
    C'est normal puisque ta combo1 n'est pas du tout lié à la BDD.

    Neanmoins je ne vois pas bien l'interêt d'aller modifier les valeurs de la base de donnée à chaque changement de valeur de ta combobox, le but est juste de ne pas avoir la valeur dans les autres combo ???

  8. #8
    Membre éclairé
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 324
    Par défaut
    bonjour

    l'interet est simple, l'applicationque je suis en train de faire permet de gerer des feuilles de match pour une equipe, lors d'un match. Afin de simplifier la tache de l'utilisateur lorsqu'il est en phase de création, je lui propose 11 combobox ou il peut choisir le nom des joueurs en fonction des postes ou ils evoluent, donc le but de la manipe est de faire disparaitre le nom du joueur qui a ete selectionné afin d'éviter les risques d'erreurs et ce que l'on commence la création de la feuille par le combo 1 ou le 8.

    C'est pour ça que je fait varier l'Init dans ma base de donnée a chaque fois que l'on sélectione un joueur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
            Dim MyConnexion2 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Application.StartupPath & "\gestionjoueurs.mdb;")
            Dim Mycommand2 As OleDbCommand = MyConnexion2.CreateCommand()
     
            strToto = Mid(Me.ComboBox1.Text, 1, 5)
     
            If strToto <> "" Then
                If CInt(strToto) > 0 Then
     
                    Mycommand2.CommandText = ("UPDATE T_JOUEUR SET INIT=false WHERE IdJoueur=") & CInt(strToto)
     
                    MyConnexion2.Open()
     
                    Dim myReader2 As OleDbDataReader = Mycommand2.ExecuteReader()
                    MyConnexion2.Close()
     
                End If
            End If
     
        End Sub
    car lorsque j'utilise mes combo ceux si sont alimentés de la façon suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
            Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Application.StartupPath & "\gestionjoueurs.mdb;")
            Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
     
            Mycommand.CommandText = "SELECT T_Joueur.IDJoueur,T_Joueur.Nom, T_Joueur.Prenom, T_Joueur.Dispo,T_Joueur.Init , T_Joueur.Ailier from T_Joueur where (T_Joueur.Dispo=1 and T_Joueur.Ailier=true and T_Joueur.Init=true)"
     
            MyConnexion.Open()
     
            Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
     
            ComboBox1.Items.Clear()
     
            Do While myReader.Read()
     
                strIdentifiant = CStr(myReader.GetValue(0))
                intLong = strIdentifiant.Length
                strIdentifiant = ""
                If intLong < 4 Then
                    Dim i As Integer
                    For i = 1 To (5 - intLong)
                        strIdentifiant = strIdentifiant & " "
                    Next
                    strIdentifiant = strIdentifiant & CStr(myReader.GetValue(0))
                    strNomPrenom = strIdentifiant & " :" & myReader.GetString(1) & " " & myReader.GetString(2)
     
                End If
    peut etre que je me répette mais, je me suis peut etre mal expliqué au début!!!!

    merci encore et je continu mes recherches
    @+
    Philippe

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Par défaut
    Alterer le contenue de ta base de donnée pour un fonctionnement visuel applicatif me semble mauvais, tant au niveau de la technicité, qu'au niveau performance.

    Moi à ta place je ferais plutôt un liens entre chacune de tes combobox avec une vue differente sur ta table de joueur et à chaque changement de valeur d'une de tes comboboxs, je lancerais le même evenement qui changerait le rowfilter de chacune de tes vues avec une instruction sql du genre "maCle not in (liste des valeurs des autes cb séparé par une virgule)"

    De cette facon tu changerais dynamiquement le contenu de chacune de tes comboboxs sans pour autant t'embetter à faire des transactions SQL et donc bouffer de la ressources tant sur le client que sur le serveur et à tout remettre à jour à la main.

    Qu'en pense tu ?

  10. #10
    Membre éclairé
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 324
    Par défaut
    je regarde les possibilités que tu me proposes, je te tiens au courant.
    merci
    @+
    Philippe

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Par défaut
    Afin de limiter le code sequentiel identique pour tes combobox (11 ca commence à être hardcore d'un point de vu interface) tu peux aussi créer un dictionnaire de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oDic As System.Collections.Generic.Dictionary(Of String, System.Windows.Forms.ComboBox)
     
    oDic = New System.Collections.Generic.Dictionary(Of String, System.Windows.Forms.ComboBox)
    oDic.Add("ComboBox1", Me.ComboBox1)
    De cette facon tu pourra faire des boucles pour faire tes traitements du genre oDic("ComboBox" & i).DisplayMember = blabla...

    Evidemment tu peux faire la même chose avec des DataView, ca permet en quelque sort d'avoir un fonctionnement identique à un eval et d'éviter des centaines de lignes de code repetitive, rendant illisible ton code et très fastidieux à maintenir.

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 194
    Par défaut
    Je crois que la meilleur solution c'est d'utiliser les dataview.rowfilter. on declare un dataview pour chaque combo pour eviter de charger les données à chaque fois.

Discussions similaires

  1. [JList] Probleme de refresh
    Par if_zen dans le forum Composants
    Réponses: 2
    Dernier message: 28/10/2006, 00h02
  2. [VB.NET] [ProgressBar] Probleme de "refresh"
    Par Aspic dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/05/2006, 17h15
  3. [tomcat][stuts]probleme de refresh page jsp
    Par v1nc3kr0 dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 29/08/2005, 11h34
  4. Réponses: 6
    Dernier message: 25/04/2005, 15h49
  5. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo