none
changer le contenu du datagrid RRS feed

  • Question

  • bonjour,

    j'ai une table X avec les colonne a,b,d,d,e,f dans mon dataset

    celle ci contient une requete 1 qui renvoie les colonne a, b,d et une colonne somme.

    le datagrid view est connecte a l table X, l'affichage des donnee est ok

    toutes fois je voudrais apres execution de la requete que mon datagridview affiche les données retournées par la requete1.

    comment proceder? je fasi du simple databinding

    Cordialment


    Marcelle NGOUNOU
    mardi 18 janvier 2011 10:26

Réponses

  • Bonjour,

    L'erreur que tu as signifie que tu essaies d'utiliser une classe non instanciée, et pas une instance de ta classe, pour lancer ta requête.

     

    Tu utilises bien le designer pour créer ton DataSet, et tu rapatries bien tes tables de la base en utilisant le Server Explorer ?

    Voilà le tutorial MSDN : http://msdn.microsoft.com/fr-fr/library/ms171897%28v=vs.80%29.aspx

    Si tu utilises déjà le Server Explorer, normalement, lorsque tu fais une compilation avec F6 dans Visual Studio, tu as ensuite au niveau designer de ta Form accès à tes TableAdapter dans tes composants (icone engrenage violette).

    Là, en revenant sur le designer de ta Form, tu fais un glisser deposer de l'element t_BORDEREAU_BORTableAdapter vers ta Form.

    Cela devrait te créer un t_BORDEREAU_BORTableAdapter1.

    Et tu peux l'utiliser de la manière suivante :

    t_BORDEREAU_BORTableAdapter1.MaRequête(monDataSet.t_BORDEREAU_BOR);
    

    Sinon, tu peux toujours l'instancier toi-même.

    t_BORDEREAU_BORTableAdapter t_BORDEREAU_BORTableAdapter1 = new t_BORDEREAU_BORTableAdapter();
    

    Cordialement,

    Thomas

     

     


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    • Proposé comme réponse Thomas Aimonetti mercredi 19 janvier 2011 13:55
    • Marqué comme réponse marclas mercredi 19 janvier 2011 14:10
    mercredi 19 janvier 2011 10:10
  • Je viens de penser à un truc.

    Si ta requête doit forcément écrite au vol, et nécessite plus qu'un passage de paramètres, dans ce cas il te faut surcharger ton DataTableAdapter pour pouvoir faire un Set d'une des requêtes du DataTableAdapter.

    Cela se fait en écrivant une classe partielle.

    Pour ce faire, il te faut rendre ton SelectCommand (par exemple) éditable.

    Tu fais clic droit sur ton Dataset, Voir le Code, et à l'intérieur, tu rajoutes :

     

    namespace
    
     myDataSetTableAdapters
    {
     partial
    
     class
    
     myTableAdapter
     {
    
      public
    
     System.Data.SqlClient.SqlCommand selectcommand {
       get
    
     { return
    
     this
    
    .CommandCollection(0); }
      }
     }
    }
    

     

    Une fois que c'est fait, il te suffit de faire :

    myTableAdapter.selectcommand().CommandText="SELECT * FROM table WHERE truc='machin'";

    Mais ca me semble un peu complexe poru ce que tu souhaites faire, je pense que tu peux t'en sortir sans surcharger le TableAdapter.

    Je te mets un tuto au cas où sur les TableAdapter : http://www.codeproject.com/KB/database/TableAdapter.aspx

    Le code est en VB.Net, mais tu peux le convertir en C# si besoin ici : http://www.developerfusion.com/tools/convert/vb-to-csharp/

    Cordialement,

    Thomas

     

     


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    • Marqué comme réponse marclas mercredi 19 janvier 2011 14:04
    • Non marqué comme réponse marclas mercredi 19 janvier 2011 14:10
    • Marqué comme réponse marclas mercredi 19 janvier 2011 14:10
    mercredi 19 janvier 2011 13:37

Toutes les réponses

  • Bonjour,

    Il est possible de cacher des colonnes dans le DataGridView.

    this.dataGridView1.Columns["CustomerID"].Visible = false;

    Sinon, il est possible aussi de le faire dans le Binding.

    Si vous nous mettez votre code utilisé pour faire le binding, on pourra vous montrer.

    Cordialement,

    Thomas


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    mardi 18 janvier 2011 12:26
  • merci Thomas,

    mais il ne s agit pas de rendre un champ invisible ou non

    ma table X contient les champs suivants A B C D E F G H

    donc si j'ai un tableadapter X elle aura le schema de la table X.

    j'ajoute une requete Z a ma table qui selection A C D de la table X et compte les elements correspondant dans la table Y

    dons le schema de la requete Z est : A C D Compteelt

    or la requete est comprise dans la datatable X, lorsque j'execute la requete tout est OK mais le champ CompteElt est visible (test realise dans le designer)

    Mais lorsque je fais la meme chose dans un formulaire avec datagrid, le schema retourner est celui de la table X

    cordialement


    Marcelle NGOUNOU
    mardi 18 janvier 2011 15:40
  • Bonjour,

    Dans ce cas, ce que je peux te proposer, c'est de rajouter, en mode designer dans ton dataset, dans la datatable X le champ Compteelt avec le bon type de données contenues dans cette colonne (soit int32, soit64, ca depend de ce que ta requête Z ramène).

    Une fois que c'est fait, la colonne Compteelt fera partie de la datatable X dans ton dataset, et lorsque tu effectueras ta requête Z a partir du datatableadapter de la table X, tu verras bien ta colonne Compeelt se remplir.

    J'espère que j'ai mieux compris ce que tu dis, j'en suis pas 100% sûr :)

    Si jamais je suis encore à côté de la plaque, n'hésite pas à me le dire !

    Cordialement,

    Thomas


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    mardi 18 janvier 2011 16:01
  • Merci Thomas,

    je vais essayer.

    en cherchant un peu,

     j ai observe que je peux écrire:  t_BORDEREAU_BORTableAdapter.Adapter.SelectCommand.CommandText=Requete;

    seulement j'ai l'erreur suivante:"Object reference not set to an instance of an object."

    je comprends pas ce qui se passe!

    cordialement
    Marcelle NGOUNOU
    mercredi 19 janvier 2011 08:52
  • Bonjour,

    L'erreur que tu as signifie que tu essaies d'utiliser une classe non instanciée, et pas une instance de ta classe, pour lancer ta requête.

     

    Tu utilises bien le designer pour créer ton DataSet, et tu rapatries bien tes tables de la base en utilisant le Server Explorer ?

    Voilà le tutorial MSDN : http://msdn.microsoft.com/fr-fr/library/ms171897%28v=vs.80%29.aspx

    Si tu utilises déjà le Server Explorer, normalement, lorsque tu fais une compilation avec F6 dans Visual Studio, tu as ensuite au niveau designer de ta Form accès à tes TableAdapter dans tes composants (icone engrenage violette).

    Là, en revenant sur le designer de ta Form, tu fais un glisser deposer de l'element t_BORDEREAU_BORTableAdapter vers ta Form.

    Cela devrait te créer un t_BORDEREAU_BORTableAdapter1.

    Et tu peux l'utiliser de la manière suivante :

    t_BORDEREAU_BORTableAdapter1.MaRequête(monDataSet.t_BORDEREAU_BOR);
    

    Sinon, tu peux toujours l'instancier toi-même.

    t_BORDEREAU_BORTableAdapter t_BORDEREAU_BORTableAdapter1 = new t_BORDEREAU_BORTableAdapter();
    

    Cordialement,

    Thomas

     

     


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    • Proposé comme réponse Thomas Aimonetti mercredi 19 janvier 2011 13:55
    • Marqué comme réponse marclas mercredi 19 janvier 2011 14:10
    mercredi 19 janvier 2011 10:10
  • Bonjour Thomas,

    là je crois que je commence à etre enervé par ce truc!!

    j'y comprends plus rien

    effectivement j'utilise le server explorer pour ajouter les composants à mon formulaire c'est bien OK

    le t_BORDEREAU_BORTableAdapter possède bien la requete de denombrement avec les differents paramettre ce qui s'execute normalement quand je fais:            t_BORDEREAU_BORTableAdapter.FillBystock_toPrint(bD_FRCEvolutionDataSet.T_BORDEREAU_BOR, MeDebutPeriode.Value, MeFinPeriode.Value);

    je peux meme lors de la trace voir le contenu de la table t_bordereau avec les champs choisis, et le champ de denombrement ajouter.

    En principe le schema du t_BORDEREAU_BORTableAdapter devrait etre le meme que celui du t_bordreau_bor, lorsque je fais le fil

    Or il me donne toujours le schema de depart de t_bordereau_bor


    Marcelle NGOUNOU
    mercredi 19 janvier 2011 12:35
  • merci Thomas

    mais comme je te l'ai dis tantot Tableadapter.myquery (proprité inexistante)

    par contre si j'ai deja le query dans le datatable, je peux bien faire un datatable.fillQuery ( qui ici represente le resultat du dis query)

    l objet n'existe certes

    pour l'extancier je fais : Dataset.borderoTableAdapter Essai = new Dataset.borderoTableAdapter

    mais apres j ai toujours le meme souci

    si je veux ecrire une commande texte

    cordialement


    Marcelle NGOUNOU
    mercredi 19 janvier 2011 12:43
  • bonjour,

    Je crois avoir compris le probleme : celui du non changement du schema de la table dan le datagridview.

    en fait au depart ce dernier est deja connecté au datatable.

    donc lorsque j'ai supprime cela, et que j'execute de nouveau ma requete t_BORDEREAU_BORTableAdapter.FillBystock_toPrint(bD_FRCEvolutionDataSet.T_BORDEREAU_BOR, MeDebutPeriode.Value, MeFinPeriode.Value);

    le datagrid prend bien le bon schema et je n'ai plus qu'a rendre invisible les champs voulu.

    Maintenant il me reste a faire le report y afferant! ??

    cordialement


    Marcelle NGOUNOU
    mercredi 19 janvier 2011 13:22
  • Bonjour,

    Quand tu fais : Essai.fillQuery(monDataset.t_BORDEREAU_BOR) ca te met que l'objet n'existe pas ?

    C'est que tu n'as pas créé d'instance de ton Dataset peut-être ?

    De la même manière que pour le DataTableAdapter, tu peux soit faire un glisser déposer de ton dataset directement sur ta form, ce qui te créera une instance du dataset nommée Dataset1, soit tu l'instancies dans ton code, en faisant Dataset monDataset = new Dataset();

    Ensuite, tu retentes le : Essai.fillQuery(monDataset.t_BORDEREAU_BOR);

    Cordialement,

    Thomas


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    mercredi 19 janvier 2011 13:25
  • Je viens de penser à un truc.

    Si ta requête doit forcément écrite au vol, et nécessite plus qu'un passage de paramètres, dans ce cas il te faut surcharger ton DataTableAdapter pour pouvoir faire un Set d'une des requêtes du DataTableAdapter.

    Cela se fait en écrivant une classe partielle.

    Pour ce faire, il te faut rendre ton SelectCommand (par exemple) éditable.

    Tu fais clic droit sur ton Dataset, Voir le Code, et à l'intérieur, tu rajoutes :

     

    namespace
    
     myDataSetTableAdapters
    {
     partial
    
     class
    
     myTableAdapter
     {
    
      public
    
     System.Data.SqlClient.SqlCommand selectcommand {
       get
    
     { return
    
     this
    
    .CommandCollection(0); }
      }
     }
    }
    

     

    Une fois que c'est fait, il te suffit de faire :

    myTableAdapter.selectcommand().CommandText="SELECT * FROM table WHERE truc='machin'";

    Mais ca me semble un peu complexe poru ce que tu souhaites faire, je pense que tu peux t'en sortir sans surcharger le TableAdapter.

    Je te mets un tuto au cas où sur les TableAdapter : http://www.codeproject.com/KB/database/TableAdapter.aspx

    Le code est en VB.Net, mais tu peux le convertir en C# si besoin ici : http://www.developerfusion.com/tools/convert/vb-to-csharp/

    Cordialement,

    Thomas

     

     


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    • Marqué comme réponse marclas mercredi 19 janvier 2011 14:04
    • Non marqué comme réponse marclas mercredi 19 janvier 2011 14:10
    • Marqué comme réponse marclas mercredi 19 janvier 2011 14:10
    mercredi 19 janvier 2011 13:37
  • Bon, je crois que nos réponses se sont croisées :)

    Donc tu as réussi à remplir ta table comme tu l'entends, à rajouterl a colonne de somme, et à rendre tes colonnes invisibles quand il le fallait, c'est bien ça ?

    Si c'est le cas, comme tu as réussi à remplir ton datagrid comme tu le souhaitais, on va clore ce thread.

    Et si tu as d'autres questions sur par exemple les reports, comme cela semble être le cas, je t'invite à ouvrir une nouvelle question, de rajouter au début de cette question un lien vers ici au cas où les développeurs ici présents souhaitent comprendre mieux ce qui s'est passé avant, et ensuite de poser ta question sur les reports :)

    Cordialement,

    Thomas


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    mercredi 19 janvier 2011 13:44
  • Merci Thomas

    Marcelle NGOUNOU
    mercredi 19 janvier 2011 14:04
  • Bonjour thomas,

     

    je voudrais mettre en place cette surcharge

    1- ma BD est sous Access

    donc c'est du system.data.oldb.oldbcommand je crois

    j'arrive pas à transcrire cela

    dois faire l'operation pour toute les tableadapters?

    voila ce qu j ai ecris et ca marche pas y a des erreurs

     

    namespace Fichier_Reception_control.BD_FRCEvolutionDataSetTableAdapters {
       
       
        public partial class T_BORDEREAU_BORTableAdapter {
           System.Data.OleDb.OleDbCommand
           {
             get {return this.commandCollection }
           }
        }
    }

    cordialement


    Marcelle NGOUNOU
    jeudi 20 janvier 2011 09:41
  • Bonjour,

    Essaye avec ceci :

    namespace Fichier_Reception_control.BD_FRCEvolutionDataSetTableAdapters
    {
      public partial class T_BORDEREAU_BORTableAdapter
      {
         public OleDbCommand GetSelectCommand()
         {
           return this.CommandCollection[0];
         }
         public void SetSelectCommand(OleDbCommand SQLQuery)
         {
           this._commandCollection[0] = SQLQuery;
         }
      }
    }
    

    En fait, CommandCollection est la collection qui contient toutes les commandes de l'Adapter, la commande 0 étant celle du Select, c'est celle que tu veux.

    Cordialement,

    Thomas


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    jeudi 20 janvier 2011 11:06
  • Re-bonjour,

    J'avais oublié la 2ème question :)

    Oui, tu vas devoir mettre ceci en place pour chacun des adapters dont tu veux pouvoir être capable de modifier dans le code les requêtes.

    Ce qui va te donner quelque chose du genre :

    namespace Fichier_Reception_control.BD_FRCEvolutionDataSetTableAdapters
    {
     public partial class T_BORDEREAU_BORTableAdapter
     {
       public OleDbCommand GetSelectCommand()
       {
        return this.CommandCollection[0];
       }
       public void SetSelectCommand(OleDbCommand SQLQuery)
       {
        this._commandCollection[0] = SQLQuery;
       }
     }
     
     public partial class Ma2emeTableTableAdapter
     {
       public OleDbCommand GetSelectCommand()
       {
        return this.CommandCollection[0];
       }
       public void SetSelectCommand(OleDbCommand SQLQuery)
       {
        this._commandCollection[0] = SQLQuery;
       }
     }
     
     public partial class Ma3emeTableTableAdapter
     {
       public OleDbCommand GetSelectCommand()
       {
        return this.CommandCollection[0];
       }
       public void SetSelectCommand(OleDbCommand SQLQuery)
       {
        this._commandCollection[0] = SQLQuery;
       }
     }
     
     // etc...
    }
    

    Cordialement,

    Thomas


    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    jeudi 20 janvier 2011 11:09