Partage
  • Partager sur Facebook
  • Partager sur Twitter

Possible de creer un GridView en public static?

Sujet résolu
    6 juin 2020 à 3:04:18

    Bonjour,

    Pour un projet j'ai créé une application en C# winform.

    j'ai 1 formulaire et une class, dans le formulaire j'affiche un dataGridView avec des boutons pour interagir avec et dans la class j'ai des méthode qui servent à le remplir avec des données de la bdd.

    La seule méthode que j'ai trouve pour autoriser l’utilisation de mon DGV dans ma class est de le passer en public static ce qui me pose pas mal de problème. En faisant ça

    • Mon DGV existe toujours mais dans la vue de mon formulaire il n'est plus visible.
    • Quand je démarre mon application 1 fois le DGV est la avec toutes les données mais une fois que je le ferme et relance une deuxième fois il est totalement effacé la seul ligne qu'il reste est celle-ci :
      public static System.Windows.Forms.DataGridView dataGridView1;
      qui se trouve dans mon form.Designer.

     mon formulaire juste après avoir mis le DGV en public static :

    Le code du DGV du designer de mon form :

    j'aimerai savoir comment régler ça ou si il y a d'autre solution pour faire ça :)

    Voila j’espère avoir été clair, merci !

    -
    Edité par ThisThis 6 juin 2020 à 3:06:54

    • Partager sur Facebook
    • Partager sur Twitter
      6 juin 2020 à 12:36:33

      Un formulaire, c'est une classe, en WinForm.

      Comme une DataGrivView est un composant graphique, il devrait être dans le formulaire et pas ailleurs.

      Utilisez le Designer Graphique de formulaire pour ajouter et placer sur le formulaire un DataGridView.

      Le Designer lui assignera un nom : la propriété "(Name)" dans la catégorie "Design", vous êtes libre de le changé du moment qu'il est unique pour cette classe de Formulaire. Il faut utiliser la vue "Propriétés" (affichable via le raccourci F4 si nécessaire).

      3 lignes sous "(Name)", dans la même catégorie, dans la vue "Propriétés", il y a la "propriété" "Modifiers". Passez la valeur de "Private" à "Public".

      Votre autre "classe" aura accès directement au DataGridView du formulaire, via son nom "(Name)". C'est pas top au niveau conception mais vous semblez déjà complètement perdu, alors.

      //dans le code de votre "classe"
      // form1 est une instance du formulaire qui a été créé avant
      // myDataSet est un DataSet qui contient les données à afficher
      
      form1.dataGridView1.DataSource = myDataSet.Tables[0];


      Pour ce qui est de la persistance des données, je vous laisse voir toutes les solutions à base de sérialisation dans un fichier, de sauvegarde dans une base de données via Entity Framework, etc..., en résumé, c'est pas automatique et c'est à vous de choisir quelle solution est adaptée à votre besoin.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        6 juin 2020 à 16:25:03

        Bonjour, merci pour votre réponse et pardon pour la mienne un peu tardive.

        pour le formulaire que l'on va appeler repVoeux, je sais c'est une classe mais je ne l'ai pas appelé comme ça pour être le plus clair possible,

        mon dataGridView est placé dans repVoeux je l’appel juste dans ma class appeler afficheVoeux afin de pouvoir le remplir des données de la BDD ( çà j'y arrive aucun problème ! :) ).

        Je n'ai pas change le nom de mon dataGridView parce que je n'en ai qu'un donc je n'en vois pas l'utilité.

        En changeant le private en public le problème que je rencontre est que je ne peux pas l'appeler en dehors de repVoeux donc je ne peux pas le remplir avec ma class afficheVoeux. Même en changeant son name il reste inaccessible.

        l'erreur :
        Erreur    CS0120    Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'repVoeux.dataGridView1'

        je rajoute le code de la method qui sert a le remplir :


        • Partager sur Facebook
        • Partager sur Twitter
          6 juin 2020 à 20:48:40

          "repVoeux", c'est le nom d'une classe de Formulaire ou d'une variable instance d'une classe de Formulaire ?

          Aux messages d'erreur, c'est plus un nom de classe de formulaire qui ne suit pas les normes de nommage de .NET.

          Normalement, on préfère faire commencer les noms de classe ou de propriété par une majuscule et les noms de variables et de champ par des minuscules.

          Donc, si c'est ne nom d'une classe, renommez la en "RepVoeux", SVP.

          Pour créer une instance d'une classe à partir d'un nom de classe, c'est avec l'opérateur "new" :

          var form = new RepVoeux();
          form.dataGridView1.DataSource = maTable;
          form.Show();

          >Je n'ai pas change le nom de mon dataGridView parce que je n'en ai qu'un donc je n'en vois pas l'utilité.

          Votre moi de dans 6 mois vous maudira de ne pas avoir donné de noms "signifiants".

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            7 juin 2020 à 19:25:53

            j'ai renommé mon formulaire avec une majuscule mais aucun changement et je vais directement modifier le nom de mon dataGridView! merci! x)
            • Partager sur Facebook
            • Partager sur Twitter

            Possible de creer un GridView en public static?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown