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

VB.NET Discussion :

DataBindingContext et ajout d'une ligne DataSet


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut DataBindingContext et ajout d'une ligne DataSet
    Bonsoir à toutes et tous !

    Je crée actuellement un formulaire qui permet de visualiser un listing clients par liaison simple grâce au DataBinding. Aucun problème pour l'affichage et le passage d'un client à l'autre mais voilà ce que je voudrais faire et qui bien évidement ne fonctionne pas.

    J'ai ajouté un bouton "Nouveau client", et j'aimerais voir un formulaire vierge apparaître à la dernière position + 1 afin d'entrer de nouvelles données pour un nouveau client. Pour ce faire, lors de l'ajout je crée une nouvelle ligne dans la table du DataSet que je pré-remplis avec des données standards et je demande au DataBindingContext de se rendre à la nouvelle position. La ligne de la table est bien créée puisque un client supplémentaire apparaît quand j'affiche client xxx sur xxx. En "montant" unité par unité, j'arrive toujours à n-1 mais jamais à la dernière ligne nouvellement créée.

    Y a-t-il une astuce que je n'aurais pas trouvée ?

    Merci d'avance pour vos réponses !

    webrider

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Une portion de code pourrait nous aider
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonsoir,

    Si votre soucis est que vous ne voyez pas le nouveau client dans votre DataGridView après l'avoir créé, il vous faut réaffecter le DataSource du DataGridView en fessant appel à la méthode .Fill du DataAdapter concerné lors de la fermeture du formulaire de saisie.

    Dis autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonDataAdapter.Fill(MaDataTable)
    MonDataGridView.DataSource=MaDataTable
    L'idée reste la même pour un DataSet ou un BindingSource.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour et merci pour vos réponses.

    Je me suis mal exprimé, je n'utilise pas un DataGridView mais un formulaire personnel (voir pièces jointes).

    Voici le code qui ajoute une ligne au DataSet :

    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
    Private Sub NouveauToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NouveauToolStripMenuItem.Click
            Try
                With Me.BindingContext(XXXDataset, "Clients")
                    Dim LigneVierge As DataRow = XXXDataset.Tables("Clients").NewRow ' Création d'une nouvelle ligne dans la table clients
                    Dim NumDernierClient As Integer = XXXDataset.Tables("Clients").Rows(.Count - 1).Item(0) ' Récupération du numéro de client du dernier client pour la clé primaire
                    With LigneVierge
                        .Item(0) = NumDernierClient + 1
                        .Item(1) = "Mr."
                        .Item(2) = "Nom"
                        .Item(3) = "Prénom"
                        .Item(4) = "Rue & numéro"
                        .Item(6) = "1000"
                        .Item(7) = "Bruxelles"
                    End With
                    XXXDataset.Tables("Clients").Rows.Add(LigneVierge)
                    .Position = .Count - 1
                    lblNbreClients.Text = "Client " & .Position + 1 & " sur " & .Count
                    CreateBindingContext()
                End With
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    Sur la première miniature on voit bien qu'il y a 3 clients au total et grâce aux boutons je sais passer au client 1/3, 2/3 puis 3/3. Une fois l'ajout demandé, j'ai bien l'affichage client 3/4 mais quand je clique sur le bouton pour passer à 4/4 ça reste bloqué sur 3/4.

    Merci.

    webrider
    Images attachées Images attachées   

  5. #5
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Je vois rien d'anomal dans votre code. J'aurais eu tendance à dire qu'il manquait un AcceptChange sur la table, mais je pense que cette fonction doit être appelée après l'Update sur le DataSet pour sauver les données dans la base de données.

    Il faudrait peut-être voir au niveau du code de votre bouton "Suivant".

    Sinon vous pouvez regarder du coté du composant "BindingNavigator" qui crée en bas de votre fenêtre (ou au dessus) le même genre de barre de navigation que sous Access
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui c'est étrange surtout qu'il n'y a aucune exception qui est levée et je peux récupérer les informations du nouveau client via le code directement dans le DataSet.

    Pour info voici le code des boutons :
    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
    Private Sub btnDebut_Click(sender As Object, e As EventArgs) Handles btnDebut.Click, btnPrecedent.Click, btnSuivant.Click, btnFin.Click
            Try
                With Me.BindingContext(XXXDataset, "Clients")
                    If sender.Equals(btnDebut) Then
                        .Position = 0
                    ElseIf sender.Equals(btnPrecedent) Then
                        .Position -= 1
                    ElseIf sender.Equals(btnSuivant) Then
                        .Position += 1
                    ElseIf sender.Equals(btnFin) Then
                        .Position = .Count - 1
                    End If
                    lblNbreClients.Text = "Client " & .Position + 1 & " sur " & .Count
                End With
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    De plus le BindingContext m'informe bien qu'il y a 4 lignes dans le DataSet puisqu'il met bien à jour le nombre total de clients. Une fois ma ligne ajoutée au DataSet devrais-je d'abord sauvegarder dans la base de données puis recharger mon DataSet ?

    Je sèche complètement là.

    webrider

  7. #7
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Peut-être essayé de faire un AcceptChange sur la datatable située dans le DataSet sans l'update de celui-ci juste pour voir si cela changera quelque chose (juste pour un test).

    C'est bien un programme en Windows Form (pas WPF) ?
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonsoir,

    Désolé, c'est moi qui suis partit sur une autre idée ...

    Pourriez vous poster le code de "CreateBindingContext()" svp

    Si dans cette procédure vous demandez de recharger les données de la base de données dans le dataset, c'est normal que vous n'ayez pas le nouveau client, sauf si j'ai mal lu, je n'ai pas vu de code pour mettre à jour la base de données.

    Le texte affiché dans le label étant codé avant la procédure "CreateBindingContext()", le label conserve la valeur donnée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblNbreClients.Text = "Client " & .Position + 1 & " sur " & .Count
    J'espère que je n'ai pas encore une fois répondu à côté de la plaque, je suis fatigué en ce moment

  9. #9
    Invité
    Invité(e)
    Par défaut
    @infosam76

    C'est effectivement du Windows Form et AcceptChanges sur le DataSet ne change rien. Par contre, j'ai essayé le BindingNavigator dont j'ai fixé la BindingSource comme étant mon DataSet et la table Clients.

    Lorsque je crée un nouveau client il est bien répercuté dans le Form et dans le BindingNavigator. Dans ce dernier je parviens à monter jusqu'au nouveau client mais toujours pas dans le formulaire qui s'arrête toujours au nombre de clients chargés de la bdd.

    @Rainui

    Voici le code de CreateBindingContext() :
    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
    Private Sub CreateBindingContext()
            cboSexe.DataBindings.Add("Text", XXXDataset, "Clients.Sexe")
            txtNom.DataBindings.Add("Text", XXXDataset, "Clients.Nom")
            txtPrenom.DataBindings.Add("Text", XXXDataset, "Clients.Prenom")
            txtAdd1.DataBindings.Add("Text", XXXDataset, "Clients.Adresse1")
            txtAdd2.DataBindings.Add("Text", XXXDataset, "Clients.Adresse2")
            txtCodePostal.DataBindings.Add("Text", XXXXDataset, "Clients.CodePostal")
            txtVille.DataBindings.Add("Text", XXXDataset, "Clients.Ville")
            txtPays.DataBindings.Add("Text", XXXDataset, "Clients.Pays")
            txtTelephone.DataBindings.Add("Text", XXXDataset, "Clients.Telephone")
            txtEmail.DataBindings.Add("Text", XXXDataset, "Clients.eMail")
            txtDivers.DataBindings.Add("Text", XXXDataset, "Clients.Misc")
            chkCourrier.DataBindings.Add("Checked", XXXDataset, "Clients.ListingCourrier")
            chkProspect.DataBindings.Add("Checked", XXXDataset, "Clients.Prospect")
        End Sub
    Merci pour votre aide et bonne soirée,

    webrider

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Rainui Voir le message
    sauf si j'ai mal lu, je n'ai pas vu de code pour mettre à jour la base de données.
    Je n'avais pas vu cette ligne, mais arrêtez-moi si je me trompe : le DataSet est la représentation en mémoire de mes données, je devrais donc pouvoir afficher ma nouvelle ligne dans mon formulaire sans pour autant avoir à mettre à jour ma bdd. Je n'ai pas affiché le code de mise à jour pour la lisibilité du code. Me tromperais-je ?

    Bonsoir,

    webrider

  11. #11
    Invité
    Invité(e)
    Par défaut
    Eh bien j'ai trouvé le souci et comme dab c'est toujours une connerie !

    Le seul problème c'est que je n'ai pas défini la valeur des checkboxes dans ma nouvelle ligne du DataSet ! Comme les champs texte (je ne les définis pas tous), j'avais dans l'idée que la valeur par défaut était nulle donc "unchecked".

    Voilà qui est donc réglé, merci à vous 2 pour votre aide précieuse.

    webrider

  12. #12
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Autant pour moi j'ai zappé les checkbox sur tes captures d'écran sinon j'aurais tilté de suite. J'ai déjà eu le problème il y a pas mal de temps ...

    Avec une ancienne version du FrameWork (la 2.0 je pense) j'avais même du intercepter l'événement de mise à jour pour mettre la valeur à jour moi même dans le dataset en fonction de la valeur du checkbox. En ce temps la c'était un bug connu m'a dit un MVP rencontré sur un colloque.

    En tout cas merci pour le tuyau faudra que je reteste un peu tout ca
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  13. #13
    Invité
    Invité(e)
    Par défaut
    Le pire c'est qu'aucune exception n'est levée ce qui rend la recherche encore plus difficile et rester bloqué plusieurs jours pour ça c'est vraiment du temps perdu.

    Merci quand-même pour ton aide infosam76 et peut-être à bientôt pour un autre post !

  14. #14
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    C'est le problème du DataBinding. c'est au niveau du debug et souvent sur des conneries.

    Peut-être à bientôt effectivement ;-)
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. dataset ajout d'une ligne pariculiere
    Par clouddd dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/10/2009, 14h22
  2. [Dataset] Ajout d'une ligne à la fin d'un dataset
    Par joeln3 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/07/2007, 13h37
  3. [AbstractTableModel] ajout d'une ligne
    Par b_52globemaster dans le forum Composants
    Réponses: 7
    Dernier message: 29/07/2005, 13h09
  4. [debutant] [JTable] ajout d'une ligne
    Par lanfeustdetroll dans le forum Composants
    Réponses: 1
    Dernier message: 29/06/2005, 18h19
  5. [C#] Ajout d'une ligne dans un dataset
    Par frechy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/12/2004, 09h35

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