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

Accès aux données Discussion :

[VB.Net] Comment remplir une ListBox correctement pour ajout/supression de données ? [Fait]


Sujet :

Accès aux données

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [VB.Net] Comment remplir une ListBox correctement pour ajout/supression de données ?
    Bonjour à tous

    Mon but est de faire un listBox contenant tous les éléments d'une table et de pouvoir en faire la mise à jours ( Update, Insert et Delete )
    Je suis capable d'afficher les données sans problème et d'ajouter des éléments dans la liste.

    Par contre lorsque j'ajoute des éléments dans la BD et que la liste est mis à jours, on dirait que le "Value Member" n'est pas affecté pour le nouvel élément. Ce qui fait que lorsque l'utilisateur clique sur un éléments dans la liste je ne suis pas capabe d'obtenir le numéro de
    l'élément.

    Est ce que quelqu'un connait une solution ...

    voici mon code

    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
    ' Initialisation des informations pour la liste contenant la table "Type"
        Private Sub initType()
            Dim objCommand As OleDb.OleDbCommand
     
            objBD.getBdConnexion.Open()
            objCommand = New OleDb.OleDbCommand("SELECT * FROM TYPE ",
     objBD.getBdConnexion)
            daType = New OleDb.OleDbDataAdapter(objCommand)
            cbType = New OleDb.OleDbCommandBuilder(daType)
            daType.InsertCommand = cbType.GetInsertCommand
            daType.UpdateCommand = cbType.GetUpdateCommand
            daType.DeleteCommand = cbType.GetDeleteCommand
            daType.Fill(ds, "Type")
            objCommand.Dispose()
            objBD.getBdConnexion.Close()
            Me.lstType.DataSource = ds.Tables("Type")
        End Sub
     
        ' L'utilisateur clique sur le bouton "Enregistrer" 
        Private Sub cmdSaveType_Click(ByVal sender As System.Object, ByVal
     e As System.EventArgs) Handles cmdSaveType.Click
     
            Dim dtType As Data.DataTable = ds.Tables("Type")
            Dim drRows As Data.DataRow = Nothing
            If Me.txtNomType.Text.Length > 0 Then
                If currentNoType = 0 Then ' Ajout
                    drRows = dtType.NewRow
                    drRows("NomType") = Me.txtNomType.Text
                    dtType.Rows.Add(drRows)
                    objBD.getBdConnexion.Open()
                    daType.Update(ds, "Type")
                    objBD.closeConnexion()
                Else ' Modification 
     
                End If
            End If
        End Sub
     
        Private Sub lstType_SelectedIndexChanged(ByVal sender As
     System.Object, ByVal e As System.EventArgs) Handles
     lstType.SelectedIndexChanged
            Me.txtNomType.Text = lstType.Text
            currentNoType = lstType.SelectedValue ' Ici il y a erreur !!!, pas de
    value pour les éléments ajoutés 
            currentTypeListIndex = lstType.SelectedIndex 
        End Sub
    Je suis nouveau avec VB.NEt, donc si vous avez des sugestions pour améliorer ma méthode je suis ouvert
    Merci à l'avance,
    PY

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Tu ne sembles pas avoir assigné les propriétés DisplayMember et ValueMember du Listbox
    Tu as un bon tuto disponible de notre collègue Plasserre :
    http://plasserre.developpez.com/v6-6.htm
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,

    Merci pour ta réponse j'ai relu le tutoriel à la recherche de mon erreur. J'ai essayé d'ajouter l'affectation des "values member" et "display member" dans le code ( avant ils étaient fais dans le designer ). Donc voici mon nouveau code. Par contre j'ai toujours la même erreur

    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
     
        Private Sub initType()
            Dim objCommand As OleDb.OleDbCommand
     
            objBD.getBdConnexion.Open()
            objCommand = New OleDb.OleDbCommand("SELECT * FROM TYPE ",
     objBD.getBdConnexion)
            daType = New OleDb.OleDbDataAdapter(objCommand)
            cbType = New OleDb.OleDbCommandBuilder(daType)
            daType.InsertCommand = cbType.GetInsertCommand
            daType.UpdateCommand = cbType.GetUpdateCommand
            daType.DeleteCommand = cbType.GetDeleteCommand
            daType.Fill(ds, "Type")
            objCommand.Dispose()
            objBD.getBdConnexion.Close()
            Me.lstType.DataSource = ds.Tables("Type")
            lstType.ValueMember = "NoType"
            lstType.DisplayMember = "NomType"
        End Sub
    Par contre en relisant le tutoriel j'ai trouvé ce passage

    "L'instruction SQL transmise comprend une clause SET pour définir les nouvelles valeurs des colonnes modifiée."
    Est-ce qu'il est possible de modifier la clause SET et comment ?

    Merci,
    PY

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'avais oublié de mettre les affectations de mes champs AVANT celui de la dataSource

    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
        Private Sub initType()
            Dim objCommand As OleDb.OleDbCommand
     
            objBD.getBdConnexion.Open()
            objCommand = New OleDb.OleDbCommand("SELECT * FROM TYPE ",
     objBD.getBdConnexion)
            daType = New OleDb.OleDbDataAdapter(objCommand)
            cbType = New OleDb.OleDbCommandBuilder(daType)
            daType.InsertCommand = cbType.GetInsertCommand
            daType.UpdateCommand = cbType.GetUpdateCommand
            daType.DeleteCommand = cbType.GetDeleteCommand
            daType.Fill(ds, "Type")
            objCommand.Dispose()
            objBD.getBdConnexion.Close()
            lstType.ValueMember = "NoType"
            lstType.DisplayMember = "NomType"
            Me.lstType.DataSource = ds.Tables("Type")
     
        End Sub
    Mais j'ai toujours le même problème

    PY

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Heu tu peux affecter ses propriétés après
    Me.lstType.DataSource = ds.Tables("Type")
    Me.lstType.ValueMember = "NoType"
    Me.lstType.DisplayMember = "NomType"
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème corrigé !
    Bonjour,

    Merci Neguib pour ton aide, j'ai trouvé mon erreur. Je n'avais pas définie correctement ma PrimaryKey dans ma DataTable. Une fois ce problème corrigé ma liste fonctionnait correctement .

    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
     
        Private Sub cmdSaveType_Click(ByVal sender As System.Object, ByVal
     e As System.EventArgs) Handles cmdSaveType.Click
     
            Dim dtType As Data.DataTable = ds.Tables("Type")
            Dim drRows As Data.DataRow = Nothing
            Dim drPriCol(0) As Data.DataColumn
     
            drPriCol(0) = ds.Tables(0).Columns("NoType")
            dtType.PrimaryKey = drPriCol
            dtType.PrimaryKey(0).AutoIncrement = True
            If Me.txtNomType.Text.Length > 0 Then
                If currentNoType = 0 Then ' Ajout
                    drRows = dtType.NewRow
                    drRows("NomType") = Me.txtNomType.Text
                    dtType.Rows.Add(drRows)
                    objBD.getBdConnexion.Open()
                    daType.Update(ds, "Type")
                    objBD.closeConnexion()
     
                Else ' Modification 
                    drRows = dtType.Rows.Find(currentNoType)
                    drRows.BeginEdit()
                    drRows("NomType") = Me.txtNomType.Text
                    drRows.EndEdit()
                    objBD.getBdConnexion.Open()
                    daType.Update(ds, "Type")
                    objBD.closeConnexion()
                End If
            End If
        End Sub
    PY

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/07/2007, 13h09
  2. Réponses: 2
    Dernier message: 26/09/2006, 11h14
  3. [VB.Net] Comment remplir une DropDownList ?
    Par Nadaa dans le forum ASP.NET
    Réponses: 11
    Dernier message: 10/07/2006, 15h06
  4. Réponses: 6
    Dernier message: 22/05/2006, 16h16
  5. Réponses: 2
    Dernier message: 11/05/2006, 22h21

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