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

ADO.NET Discussion :

Dataset et Datagridview


Sujet :

ADO.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut Dataset et Datagridview
    Bonjour à tous,

    J'ai à réalisé une application concernant une liste de matériel (qui provient de 3 tables de ma BDD) que je doit gérer dans un Datagridview (modification/ajout/suppression) après avoir remplis un dataset

    Je découvre ADO.net et j'ai quelques questions à vous poser.

    Tout d'abord, (sachant qu'il faut que je mette à jour mon dataset aprés les modifs effectuées) il est préférable de créer 3 datatables différentes avec 3 requetes sans jointures, ou une seule datatable avec une requetes et des jointures ?

    Ensuite, pour la mise à jour de la BDD à l'aide du dataset, si je choisis l'option de ne créer qu'une seule datatable (avec une requete et des jointures), est-il possible de faire l'update sur les 3 tables de la BDD directement ?
    J'ai lu pas mal de choses sur la méthode update de l'objet dataset mais ce n'est pas encore très clair.

    au cas ou voici la requete pour l'option d'une seule datatable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    z_rqte = "SELECT  T1.Af_Ctr_Cde,T2.Mt_DesRef, T3.Et_Lib, T2.Mt_SriCst, T1.Af_NumCtt, T1.Af_DteCtt, T1.Af_NbrLoy, "
    z_rqte = z_rqte & "T1.Af_MttLoy, T1.Af_DepGar, T1.Af_CttFin, T1.Af_DepGar "
    z_rqte = z_rqte & "FROM MAS..Mt_Aff T1 INNER JOIN MAS..Mt_Mtr T2 ON T1.Af_Ett_Mtr = T2.Mt_Ett_Mtr "
     z_rqte = z_rqte & "AND T1.Af_Mtr_SriCst = T2.Mt_SriCst INNER JOIN MAS..Mt_Ett T3 ON T2.Mt_Ett_Mtr = T3.Et_Cde "
     z_rqte = z_rqte & "WHERE T1.Af_Ctr_Cde='" & z_stCodCentre & "'"
    Pour résumer :
    soit:
    -je crée 3 datatables différentes représentant mes 3 tables de la BDD
    -je les ajoute à mon dataset
    -je remplis mon datagridview
    -je met à jour ma BDD avec mon dataset

    soit:
    -je crée une seule datatable comportant le résultat de la requête
    -je l'ajoute à mon dataset
    -je remplis mon datagridview
    -je met à jour ma BDD avec mon dataset

    j'espère avoir été assez clair

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par gael74 Voir le message
    Tout d'abord, (sachant qu'il faut que je mette à jour mon dataset aprés les modifs effectuées) il est préférable de créer 3 datatables différentes avec 3 requetes sans jointures, ou une seule datatable avec une requetes et des jointures ?
    Ben ça dépend de comment tu vas utiliser les données... Mais si tu dois mettre à jour derrière, c'est plus facile avec 3 DataTable séparées.

    Citation Envoyé par gael74 Voir le message
    Ensuite, pour la mise à jour de la BDD à l'aide du dataset, si je choisis l'option de ne créer qu'une seule datatable (avec une requete et des jointures), est-il possible de faire l'update sur les 3 tables de la BDD directement ?
    J'ai lu pas mal de choses sur la méthode update de l'objet dataset mais ce n'est pas encore très clair.
    Tu ne peux pas faire un Update d'une table si la SelectCommand est une jointure, en tous cas pas avec les requêtes de mise à jour générées par DbCommandBuilder : ça ne fonctionne qu'avec les requêtes sur une seule table. Par contre tu dois pouvoir créer toi-même les requêtes UpdateCommand/InsertCommand/DeleteCommand de l'adapteur, en mappant les paramètres sur les colonnes de la DataTable (DbParameter.SourceColumn)

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Ben ça dépend de comment tu vas utiliser les données... Mais si tu dois mettre à jour derrière, c'est plus facile avec 3 DataTable séparées.
    J'avais choisi cette solution c'est déjà ça
    Par contre, il existe une méthode simple pour remplir le datagridview avec plusieurs datatables ?
    je sais qu'avec une datatable on utilise " datagridview.datasource = dataset ", mais là je me suis "embetté" à faire un parcours de toutes les datatables pour ajouter les items un par un, donc c'est un peu lourd.

    Tu ne peux pas faire un Update d'une table si la SelectCommand est une jointure, en tous cas pas avec les requêtes de mise à jour générées par DbCommandBuilder : ça ne fonctionne qu'avec les requêtes sur une seule table. Par contre tu dois pouvoir créer toi-même les requêtes UpdateCommand/InsertCommand/DeleteCommand de l'adapteur, en mappant les paramètres sur les colonnes de la DataTable (DbParameter.SourceColumn)
    Ok, étant donné que je suis parti sur les 3 tables, je vais créer les propriétés InsertCommand/UpdateCommand/DeleteCommand.

    Encore une question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE Customers SET CustomerID = @CustomerID, CompanyName =  @CompanyName "
    Cette requête va bien mettre à jour plusieurs lignes si je ne précise pas de where ? (j'ai encore un peu de mal avec les paramètres)

    Merci encore pour ton aide !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par gael74 Voir le message
    J'avais choisi cette solution c'est déjà ça
    Par contre, il existe une méthode simple pour remplir le datagridview avec plusieurs datatables ?
    Tu peux modéliser dans le DataSet les relations entre les tables. Si tu as besoin dans la table X d'un champ "toto" de la table parente Y, tu peux créer la colonne "toto" dans X en spécifiant comme expression :
    "Parent(Nom_De_La_Relation).toto"


    Citation Envoyé par gael74 Voir le message
    Ok, étant donné que je suis parti sur les 3 tables, je vais créer les propriétés InsertCommand/UpdateCommand/DeleteCommand.
    Ben non, justement... c'est seulement si tu avais créé une seule DataTable avec le résultat de la jointure que tu devrais faire ça. Si tu fais des DataTable séparées, le CommandBuilder se débrouillera pour générer ces commandes automatiquement.

    Citation Envoyé par gael74 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE Customers SET CustomerID = @CustomerID, CompanyName =  @CompanyName "
    Cette requête va bien mettre à jour plusieurs lignes si je ne précise pas de where ? (j'ai encore un peu de mal avec les paramètres)
    Oui, donc tu as plutôt intérêt à mettre un WHERE... mais de toutes façons tu ne devrais pas avoir besoin de créer les requêtes toi-même.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Ok,en fait il me semble plus intéressant d'utiliser les propriétés InsertCommand/UpdateCommand/DeleteCommand avec les parametres (histoire d'apprendre à manipuler tout ça)
    J'avais gardé une autre version de mon programme avec une seule Datatable donc je réutilise la requête avec les jointures.
    Je me pose encore une question (dsl je n'ai pas trouvé d'exemple sur le net)

    Par exemple j'ai la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T2.champ1 ,T1.champ2,T2. champ8 FROM Table1 T1 JOIN Table2 T2 ON T1.champ2 = T2.champ1
    Donc je met le résultat dans une datatable d'un dataset, je fais mes manips avec mon datagrid et ainsi de suite..

    Pour la mise à jour, lorsque je créer mon UpdateCommand (et insert/delete...) :

    Dans mon selectcommand, je met ma requete avec la jointure? ou je doit faire 2 selectcommand différents ?
    Je me pose la meme question pour les updatecommand/insert/delete ...

    Merci encore

    Apparemment, il faut faire 2 requêtes différentes pour chaque commande (j'ai trouvé ça mise à jour avec jointure )
    Ce n'est pas du Ado.net mais je suppose que c'est le même principe. Peut tu me confirmer ça ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Pour le SelectCommand, tu mets la requête avec la jointure.
    Pour les autres, tu mets autant de requêtes que de tables à mettre à jour, séparées par des points-virgules. (ce dernier point est un peu théorique, j'ai jamais essayé... donc je suis pas certain que ça marche )

Discussions similaires

  1. [Débutant] dataset et datagridview
    Par jolona dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/12/2011, 13h07
  2. Réponses: 2
    Dernier message: 19/08/2008, 13h29
  3. Suppression de ligne dans dataSet via Datagridview
    Par papy75 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/05/2008, 21h30
  4. XML DataSet et DataGridView
    Par amalaxel dans le forum C#
    Réponses: 8
    Dernier message: 10/06/2007, 13h20
  5. probleme dataset et datagridview
    Par issam_eddine dans le forum VB.NET
    Réponses: 5
    Dernier message: 25/05/2007, 10h53

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