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 :

Le BindingNavigatorSaveItem ne modifie pas la base de données


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut Le BindingNavigatorSaveItem ne modifie pas la base de données
    Bonjour,

    Je travaille sur un projet de cahier de bord pour enseignants, sous forme de solution Windows Forms, sous C#, avec Visual Studio 2017.

    La fenêtre principale, pour l’instant, n’est qu’un formulaire comportant un masque de saisie qui me permet de saisir le prénom, le nom et la date de naissance des élèves, et de préciser s’il s’agit de redoublant, à l’aide d’une case à cocher. Ce masque de saisie devrait permettre d’alimenter une base de données.

    Voici le formulaire, qui comporte également une DataGridView, qui affiche les données de la base de données Elèves.

    Nom : Form accueil Prof.png
Affichages : 99
Taille : 15,2 Ko

    Tout semble fonctionner parfaitement, mais la touche « Enregistrer » de la barre d’outils « BindingNavigator » ne modifie pas la base de données. Voici la méthode déclenchée par l’événement click :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void elevesBindingNavigatorSaveItem_Click(object sender, EventArgs e)
            {
                this.Validate();
                this.elevesBindingSource.EndEdit();
                this.elevesTableAdapter.Update(this.profDataSet.Eleves);
                this.profDataSet.AcceptChanges();
     
     
                elevesBindingSource.DataSource = profDataSet.Eleves;
     
            }
    Voilà plusieurs jours que je galère sur cette question, mais je ne parviens pas à trouver ce qui cloche.

    Voici à présent la méthode déclenchée par le chargement de la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void Form1_Load(object sender, EventArgs e)
            {
                elevesTableAdapter.Fill(dataTable: profDataSet.Eleves);
                elevesBindingSource.DataSource = profDataSet.Eleves;
            }
    Les zones de texte sont bien reliées à la base de données, ainsi que la DataGridView. Lorsque je saisis un prénom, un nom, une date de naissance dans le masque, il est bien copié dans la DataGridView. Mais les données ne sont jamais sauvegardées dans la base.

    Merci de m'indiquer ce qui manque dans mon code.

    A bientôt.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    ID est elle bien définie comme clé primaire de la table ?
    Est-ce que tu modifie cet ID ?

  3. #3
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par popo Voir le message
    ID est elle bien définie comme clé primaire de la table ?
    Est-ce que tu modifie cet ID ?
    Bonjour @popo,

    Je te confirme que ID est définie comme clé primaire de la table. Je ne touche pas à cet ID, il est incrémenté automatiquement par Visual Studio.

    Je pense que le problème vient plutôt d'une mauvaise conception de la connexion à la base de données. De fait, je ne sais pas trop comment on construit la connexion, le DataSet, la BindingSource, comment ça se rattache au serveur, comment je dois créer les requêtes, je fais tout ça un peu à tâtons, parce que je n'ai pas trouvé de cours satisfaisant pour ça. Même pour la création de base de données, je suis un peu dans le flou. En fait, je la crée sous Visual Studio, c'est une base de données .mdf.

    En fait, j'ai continué à tâtonner, et tout est souvent parti en sucette. J'ai souvent cru tout perdre.
    Mais j'aimerais savoir comment je dois mettre en place tous les éléments de l'accès aux données, c'est encore confus dans mon esprit.

    Merci, je continue de chercher.
    Cordialement,

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Peu importe si c'est toi ou VS qui modifie la clé primaire.
    Si elle est modifiée, tu vas soit insérer un nouvel enregistrement, soit modifier le mauvais (si c'est mal géré).

    Et est-ce que tu as bien défini les commandes Insert, Delete et Update de ton adapter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
    adapter.DeleteCommand = builder.GetDeleteCommand(true);
    adapter.UpdateCommand = builder.GetUpdateCommand(true);
    adapter.InsertCommand = builder.GetInsertCommand(true);

  5. #5
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par popo Voir le message
    Peu importe si c'est toi ou VS qui modifie la clé primaire.
    Si elle est modifiée, tu vas soit insérer un nouvel enregistrement, soit modifier le mauvais (si c'est mal géré).

    Et est-ce que tu as bien défini les commandes Insert, Delete et Update de ton adapter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
    adapter.DeleteCommand = builder.GetDeleteCommand(true);
    adapter.UpdateCommand = builder.GetUpdateCommand(true);
    adapter.InsertCommand = builder.GetInsertCommand(true);
    Bonjour @popo,

    Merci pour ton aide. Mon application est toute bête, et à force de tester et de manipuler, j'ai dû dérégler pas mal de choses, peut-être que la connexion n'est plus configurée comme il convient. Alors, j'ai créé une autre application Windows Form, encore plus simple, et j'ai compris ce qui n'allait pas, ou plutôt, j'ai compris que tout allait bien. J'explique pour ceux à qui ça pourrait servir, mais je vais considérer la question comme résolue :

    Windows Form n'enregistre pas les données tant que vous êtes sur Visual Studio, c'est-à-dire en mode Debug. En revanche, si vous lancez l'application en double-cliquant sur le fichier .exe (peu importe qu'il s'agisse du fichier "debug" ou "release", les données sont bien sauvegardées. En réalité, dès que vous êtes dans Visual Studio, à chaque fois qu'il génère la solution, Visual Basic efface les données de la base.

    La création de cette interface est très simple : Je vais sur le concepteur de formulaire (Form1.cs[Design]), et j'affiche le volet "Source de données". J'ai une combobox qui me permet d'alterner "DataGridView" et "Détails". Je fais glisser l'un, puis l'autre sur le formulaire, comme n'importe quel contrôle.

    Nom : Source de données DataGridView.png
Affichages : 55
Taille : 9,1 Ko

    La position "Détail" génère un "BindingNavigator" (barre d'outils standard des bases de données) avec un masque de saisie avec tous les intitulés, et la position "DataGridView" génère le DataGridView. Tous deux sont déjà connectés à la base de données, en créant un BindingSource, un TableAdapter et un tableAdapterManager.

    La barre d'outils "BindingNavigator" est déjà opérationnelle, et le bouton "Save" permet d'enregistrer, mais les données seront effacées à chaque fois que vous générez la solution.

    Merci encore, et peut-être à bientôt !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/12/2010, 09h57
  2. [debutant] Requete ne modifie pas la base
    Par el_harrathi dans le forum JDBC
    Réponses: 4
    Dernier message: 13/11/2008, 22h40
  3. [phpMyAdmin] phpMyAdmin n'affiche pas les bases de données ?
    Par delassuss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 12/04/2007, 07h44
  4. MySQL ne trouve pas la base de données
    Par alfigor dans le forum Outils
    Réponses: 3
    Dernier message: 26/06/2006, 12h42
  5. DBListBox n'affiche pas ma base de données !
    Par vins91 dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/03/2005, 21h35

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