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

C# Discussion :

Inserer une ligne d'un grid dans la table de la BD associée


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 111
    Points : 65
    Points
    65
    Par défaut Inserer une ligne d'un grid dans la table de la BD associée
    Bonjour,

    J'ai un petit problème, et je crois que la solution existe mais je ne sais pas comment m'y prendre.
    Voila, j'ai un datagridView qui affiche les résultats d'une requette un peu complexe, et j'aimerai pouvoir lors de l'insertion d'une ligne dans le grid que ca soit fait de meme dans la table associé ( le meme principe que dans VB6.0 si je ne me trompe pas ).

    Des propositions ?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut DataSet
    Utiliser un DataSet pour le stockage des infos depuis la table et la mise à jour (pattern unit of work)

  3. #3
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Points : 158
    Points
    158
    Par défaut
    Bonjour

    Est ce que la requête est une jointure entre plusieurs table ?

    Comment tu remplis le dataset, si c'est avec le DataAdapter, donc il faut attribuer une valeur a la propriété InsertCommand, cad que cette command qui sera appelé au moment ou tu rajoute dans ton datagridview et donc la tu pérsonalise ta commande avec l'insert que tu veux .

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    voici la méthode que j'utilise pour remplir mon grid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     public static void fillComposantGrid(String req, String nomTable, System.Windows.Forms.DataGridView composant)
            {
                _data2 = clsBD.ExecuteSQL(req, nomTable);
                composant.DataSource = _data2.Tables[nomTable];
                _data2.Dispose();
            }
    avec CLS.ExcuteSQL la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static DataSet ExecuteSQL(string vSQL, string vTableName)
            {
                SqlCommand _SqlCommand = new SqlCommand(vSQL,GlobalVar._SQLConnection);
                _SqlCommand.CommandTimeout = 0;
     
                SqlDataAdapter _DataAdapter = new SqlDataAdapter();
                _DataAdapter.SelectCommand = _SqlCommand;
     
                DataSet _DataSet = new DataSet();
                _DataAdapter.Fill(_DataSet, vTableName);
     
                return _DataSet;
            }
    J'ai vu l'inserCommand, et si j'ai bien compri, elle execute la requette que tu lui donnes , il faut que ca soit un insert, cela ne m'aide pas, car comme j'ai dit, ma requette est compliquée ( et ce n'est pas moi qui l'ai réalisé).
    Je voudrais trouver si cela existe un lien plus simple entre la datagridview et la table.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Set la propriété InsertCommand (voir update et delete si tu en as besoin) de ton dataAdapter.

    Voilà un lien qui te seras peut-être utile http://www.csharphelp.com/archives/archive236.html

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    il y a un truc que je ne saisie pas, si je veux utiliser le insertcommand que vous dites, pourquoi ne pas juste executer une requete directe sur la table?
    je ne vois vraiment pas c'est quoi l'interet de ce insertcommand

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Cet insertCommand est une requête (SQL) sur la table au final. Il permet juste de gérer les choses plus facilement. En gros :
    Tu récupères les infos dans le dataset, tu le link sur ton datagrid, une fois ceci fait tu peux modifier les données de ton dataset comme tu le veux (mis à jour, ajout, suppression) et lorsque tu appelles la méthode update du dataadapter, il se chargera d'exécuter les bonnes actions pour la mise à jour de ta table (si les propriété insertcommand, updatecommand etc... sont bien renseignées)

    Voilà j'espère que c'est un peu plus clair

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Donc si j'ai bien compris, ce qui se fait, je peux aussi le faire d'une autre manière, En executant tt simplement les requetes dans les eventschange, par exemple dans le cellchange ou le addRow.
    c bien ca ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Oui bien sur, mais pour ma part je trouve cela moins sexy ...
    Le dataset te permet beaucoup de flexibilité grâce à ces commandes prédéfinies. A toi de voir, mais si tu le souhaites tu peux très bien appeler tes requêtes pour chaque changements dans ton grid (mais réfléchi que chaque fois qu'un changement aura lieu tu devras appeler ta db pour la mettre à jour etc...)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    Non mais oui
    Je n'allais pas utilisé ma méthode, c'était juste pour savoir si j'ai bien compri l'utilité du insertcommand.
    Mon problème de base été que la requette est compliquée et que je voulais trouver un moyen de metre a jour la dataset sans avoir a réécrire ma requette, vu que le lien est fait pour la lecture, je me demandais si je pouvais le garder et l'utiliser pour l'écriture.

    Si jamais je réécris ma requette et que j'utilise le insertcommand ou update, est ce que ces commandes vérifie avant insertion que le type de donnée est bon ou pas ?et est ce qu'il update toute la table ?cela ne prends pas bcp de temps ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    De toute manière tu ne vas pas pouvoir mettre n'importe quel type dans tes champs de ton dataset. Si un paramètre et de type incorrect je pense que ca va péter (que ce soit coté db ou dataadapter).
    Il fait un update sur ce qui a été modifié (insert, update et delete). Et ca peux prendre du temps mais d'un autre sens je pense que c'est mieux optimisé qu'un aller retour à chaque changement.

  12. #12
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Points : 158
    Points
    158
    Par défaut
    TestDatagRID.rar

    Bonsoir

    Alors, pour bien expliquer le concept des insert,update,delete,select commmand de l'objet DataAdpater, j'ai créé une application rapidos que tu va trouver en piéces jointe, dans l'exemple j'ai géré juste l'insert et le select command, et le principe et le même pour les autres commandes.

    Aussi, tu va remarquer que j'ai utilisé l'événement DataRowValidated pour appeler l'update de l'objet dataadpeter et finalement synchroniser les données vers la base.

    Cela dis il faut bien penser à l'archi de ton application sinon ça va être la galère.

    Bon Courage !!

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 111
    Points : 65
    Points
    65
    Par défaut
    bonjour à tous
    les solutions proposées sont très interessantes mais pas adapté a ma solution.
    Je vais expliquer en quoi c'est pas le cas, en esperant que quelqu'un puisse m'aider.
    J'ai un combobox d'ou je séléctionne un nom de table, a partir de se nom de table je vais récupérer les champs de la table et leurs alias (à partir de la BD un table appelé dictionnaire ) puis je génére un dataset qui contient les valeurs de cette table, et cela en executant une requete Select sur les champs récupérer. Une fois que je récupère c'est champs je les affiche dans un gridview.
    Le problème c'est que le grid contient les alias, et moi je ne connais pas les types de ses champs, donc une fois que je veux faire l'update je dois créer les sqlparametre avec le type que je ne connais pas. j'ai pensé a récuperer les types du grid mais je ne sais pas si c''est une bonne idée.
    J'espère que c'est claire ce que j'ai dit :s

  14. #14
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Points : 158
    Points
    158
    Par défaut
    Salut

    Quand tu dis que tu crée un DataSet et tu l'affiche dans le Datagridview, on sous entend bien que c'est plus un Datable qui est créé et qui a ajouté dans le DataSet, et on sais bien qu'un DataTable contient une Collection des colonnes (Columns), chaque colonne contient une propriété 'DataType' que tu peux utiliser pour créer tes paramètres pour l'insert.

    capice ?

Discussions similaires

  1. [DOM] Inserer une ligne dans un tableau
    Par xclam dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/06/2008, 10h38
  2. [DOM][langage ???]insérer une ligne dans un xml
    Par atchoumen dans le forum APIs
    Réponses: 1
    Dernier message: 03/08/2007, 13h32
  3. Réponses: 1
    Dernier message: 08/09/2006, 18h23
  4. [VBA-E] Inserer une ligne vide dans Excel
    Par monsurf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2006, 16h48

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