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

Visual Studio Discussion :

VS2013 C# - TableAdapterManager.UpdateAll() : master/detail


Sujet :

Visual Studio

  1. #1
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut VS2013 C# - TableAdapterManager.UpdateAll() : master/detail
    Salut à tous,

    Je viens d'exploser une première souris sur un problème que je n'arrive pas à résoudre (après y avoir passé 4 jours, et épluché des milliers de sites/forums...).

    J'ai une base de données assez simple :

    Nom : DataSet.png
Affichages : 391
Taille : 16,2 Ko

    Mon DataSet est bien en mode "mise à jour hiérarchique". Au niveau de mes adapter, j'ai bien coché la case "Actualiser la table de données" afin qu'il ajoute un "select" après le insert pour actualiser les PK. Concernant ma relation, elle est bien de type "relation + clé étrangère" avec une mise à jour en cascade pour la modification et la suppression.

    Sur ma Windows Form, la procédure que j'ai employé est la plus basique possible :

    • A partir de la fenêtre source de données, j'ai glissé ma table "documents" (en mode détails),
    • Puis j'ai glissé ma table "documentslignes" (en mode datagridview)


    Sur ma form, les éléments suivants se sont créés automatiquement :

    • 2 BindingSource pour mes 2 tables (avec AllowNew à TRUE),
    • Les 2 TableAdapter correspondants,
    • Un TableAdapterManager,
    • Un DataSet.


    La source de mon DocumentsLignesBindingSource est bien DocumentsBindingSource avec comme DataMembert la clé étrangère qui le lie à la table Documents.

    Au chargement de ma form, j'ai les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.documentSource.AddNew();
    this.lignesSource.AddNew(); //Sans cette ligne, même problème
    this.dComptaSQL.EnforceConstraints = false; //Sans cette ligne, même problème
    Et sur le clic de mon bouton "valider" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    this.Validate();
    this.documentSource.EndEdit();
    this.lignesSource.EndEdit();
    this.dComptaSQL.EnforceConstraints = true;
    this.dComptaSQL.GetChanges(); //Rajouté en espérant arranger les choses, en vain
    this.DataManager.UpdateAll(this.dComptaSQL);
    Jusque là : tout semble en ordre.

    J'exécute maintenant la machine. J'obtiens la fenêtre suivante (avec "-1" dans les champs de clé, fonctionnement normal puisque les clés sont normalement alimentées par le TableAdapterManager) :

    Nom : Execution.PNG
Affichages : 325
Taille : 11,5 Ko

    En cliquant sur "Valider", le -1 au niveau de l'en-tête de ma form passe bien à "1". En revanche, les lignes disparaissent et le message suivant s'affiche :

    Nom : Erreur.PNG
Affichages : 330
Taille : 20,9 Ko

    Et là, je me tape la tête contre le mur en espérant remettre les idées en ordre et trouver la solution...

    Alors si quelqu'un de généreux passe par là, et souhaite secourir une âme charitable (et suicidaire), je lui en serai reconnaissant...

    Merci

  2. #2
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut
    Personne n'a été confronté à la question ? C'est dommage, je trouve le TableAdapterManager bien pratique...

  3. #3
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut
    Si jamais quelqu'un se retrouve dans la même solitude face à un tel problème, voici comment je me suis débrouillé

    Lorsqu'on édite une ligne, il faut bien faire attention à mettre l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monDataSource.EndEdit();
    Cette ligne est donc à insérer dans l'événement "Enter" de votre DataGridView, mais aussi et surtout si vous modifiez des lignes de DataGridView par programmation !

    C'était mon cas. J'avais ajouté sur l'événement "Validating" un recalcule de la ligne. Mais au cours de ce recalcule, j'avais oublié la commande "EndEdit". Ce qui, après correction, donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void maGridView_Validating(object sender, CancelEventArgs e){
      monDataSource.EndEdit();
      maGridView.CurrentRow.Cells["NomChamp"].Value = "valeur";
    }
    Voilà comment perdre plusieurs jours de travail pour pas grand chose...

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

Discussions similaires

  1. UI Master-Detail et multiselect: la règle ?
    Par GoustiFruit dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/03/2008, 15h24
  2. Réponses: 6
    Dernier message: 26/10/2007, 12h04
  3. [Tomahawk] [dataTable] Master detail
    Par infonini dans le forum JSF
    Réponses: 3
    Dernier message: 06/09/2007, 12h42
  4. master detail -dbLookupComboBox
    Par atb dans le forum Bases de données
    Réponses: 1
    Dernier message: 10/04/2007, 19h23
  5. [Forms] Debugger/Pb canevas-relation Master/detail
    Par lafouine dans le forum Forms
    Réponses: 16
    Dernier message: 12/08/2005, 19h51

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