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 :

Acces au datagridview d'une autre forme et ou retour methode avec contenu du datagridView [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut Acces au datagridview d'une autre forme et ou retour methode avec contenu du datagridView
    Bonjour

    j'ai sur une form1 un datagridView.

    Pour le charger j'ai fait une classe (pas la classe de la form1) où se trouve cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        public void MiseAJourListServeurs(DataGridView Dtgv, string fileName)
        {
            maConnexion = new SQLiteConnection("Data Source=" + fileName + ";Version=3;");
            maConnexion.Open();
     
            SQLiteCommand comm = new SQLiteCommand("Select * From serveurs order by Description", maConnexion);
            using (SQLiteDataReader read = comm.ExecuteReader())
            {
                while (read.Read())
                {
                    Dtgv.Rows.Add(new object[] {                    
                        read["Description"],
                        read["HostName"],
                        read["PortFTP"].ToString(),
                        read["portTCP"].ToString(),
                        read["LogIn"],
                        read["cryptage"],
                        read["Idserveur"]
                        });
                }
            }
            maConnexion.Close();
        }
    Je passe à la méthode le chemin vers une base de données et le datagridview à mettre à jour. Ça me permet d'accéder à ce datagridView depuis la nouvelle classe...

    Problème, si je veux déclencher cette méthode depuis une autre form (Form2) je ne sais pas passer la référence du datagridview puisque celui ci n'est pas visible depuis form2 malgré que je l'ai passé en public dans form1 :-(
    Du coup Comment puis je accéder à mon datagridView depuis la class à part ou depuis form2 ? Je me rends compte que de passer le datagridview en paramètre n’était pas bien élégant.

    Il semblerait que je puisse passer le datagridview en paramètre du constructeur de la seconde form mais ça me parait un peu tiré par les cheveux...

    Merci par avance pour votre éclairage

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    bonjour,

    Le passage de ton DGV en paramètre dans le constructeur de ton form2 ne ferait-il pas l affaire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    private Datagridview m_Dgv{ get; set;}
     
    public Form2(Datagridview Dgv)
    {
        InitializeComponent();
        m_Dgv = Dgv;
    }
    a+

  3. #3
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    Bonjour

    En fait hier je suis arrivé à faire le job en passant le datagridview en paramètre à form2 mais j'ai fini par poster ici ma question ayant le sentiment que c’était une solution pas très "normale"

    c'est une pratique bonne et normale de faire comme ça en fait ?


    Merci

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    en fait lorsqu un projet bien concu est constitué de classes instanciables (form2 etant une classe) c est en effet une bonne pratique. Mais je ne connais pas le perimetre de ton projet donc.....

    a+

  5. #5
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    Tous les projets que j'ai fait jusqu'à maintenant entassaient presque tout dans le form1, la classe de base.
    Je tente de sortir de ce mode "programmation minable" pour gagner en lisibilité au niveau programmation, faire des choses plus ergonomiques pour l'utilisateur, gagner en fiabilité (avec un code plus structuré)
    mais si le msdn répond à toutes les questions précises il n'est pas simple de comprendre les bonnes pratiques
    donc merci de m'avoir répondu déjà !

    Là je tente de programmer intelligemment en mettant dans des classes ce qui peut se rattacher à un "objet" c'est à dire pour moi tout ce qui se rattache à des calculs métier, à un sujet de traitement particulier ou au traitement d'un composants clé dans une form tel qu'un datagridview qui contient les données qui intéressent l'utilisateur. Si je comprends a peu près bien la notion de classe et d'objet aujourd'hui j'ai beaucoup de mal à comprendre comment structurer les liens entre les classes (en tête de liste les interactions avec les éléments des forms)

    Donc si je comprends bien : le fait de passer en paramètres au constructeur d'une classe les objets dont elle peut avoir besoin permet d'instancier grâce à cette classe un objet qui connait un autre objet ?

    si dans form1 je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form2 maform2 = new Form2(monObjet,monAutreobjet)
    alors je peux modifier ou appeler monObjet ou monAutreObjet

    et c'est la bonne manière de faire ?

    cool


    Petite question subsidiaire
    dans ce code fourni plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private Datagridview m_Dgv{ get; set;}
     
    public Form2(Datagridview Dgv)
    {
        InitializeComponent();
        m_Dgv = Dgv;
    }
    A quoi sert le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Datagridview m_Dgv{ get; set;}
    Si je ne me trompe pas c'est une propriété de l'objet Form2 que l'on peut donc lire ou écrire depuis le parent de l'objet. a quo ica sert de créer une telle propriété et de l'initialiser dans le constructeur avec le paramètre passé au constructeur ?
    Merci

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par petitours Voir le message
    Tous les projets que j'ai fait jusqu'à maintenant entassaient presque tout dans le form1, la classe de base.
    Je tente de sortir de ce mode "programmation minable" pour gagner en lisibilité au niveau programmation, faire des choses plus ergonomiques pour l'utilisateur, gagner en fiabilité (avec un code plus structuré)
    Et c'est tout à ton honneur


    Citation Envoyé par petitours Voir le message
    Là je tente de programmer intelligemment en mettant dans des classes ce qui peut se rattacher à un "objet" c'est à dire pour moi tout ce qui se rattache à des calculs métier, à un sujet de traitement particulier ou au traitement d'un composants clé dans une form tel qu'un datagridview qui contient les données qui intéressent l'utilisateur. Si je comprends a peu près bien la notion de classe et d'objet aujourd'hui j'ai beaucoup de mal à comprendre comment structurer les liens entre les classes (en tête de liste les interactions avec les éléments des forms)
    C'est pourquoi il est avant tout recommandé de bien conceptualiser/structurer un projet : textuellement cela permet de faire ressortir des termes qui viendront poser les fondations (l'ossature) :

    - cela permet dans ton explorateur de solutions de créer des dossiers qui pourraient correspondre à des espaces de noms, les plus communs à divers projets (cela dépends du domaine) : Helpers, Core, Extensions, Settings, ...etc.....
    - en relisant bien la description de certaines fonctionnalités, tu pourras les regrouper et ainsi définir certains noms de classes. Des classes qui seraient susceptibles de porter le même nom avec des termes communs qui les décrivent sous entendraient la notion d'héritage...etc.....

    Bien évidement toute cette phase peut être amenée au moyen de certaines méthodes bien connues : cartes CRC, UML, ....etc...


    Citation Envoyé par petitours Voir le message
    Donc si je comprends bien : le fait de passer en paramètres au constructeur d'une classe les objets dont elle peut avoir besoin permet d'instancier grâce à cette classe un objet qui connait un autre objet ?
    Non cela n'instancie pas l'objet que tu passes en paramètre. Cela permets d'obtenir une référence de l'objet dont tu auras besoin.

    Citation Envoyé par petitours Voir le message
    si dans form1 je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form2 maform2 = new Form2(monObjet,monAutreobjet)
    alors je peux modifier ou appeler monObjet ou monAutreObjet

    et c'est la bonne manière de faire ?

    cool

    C'est une notion basique en POO, avec ton code tu viens d'obtenir une instance de form2 nommée maform2 mais tu ne pourras pas accéder à monobjet et monautreobjet (ex : maform2.monobjet ou maform2.monAutreobjet) puisque tu n'as pas créés de propriétés avec attribut Public (ce qui réponds à ta prochaine question. )
    De plus imaginons que tu comptes accéder à la référence monObjet ou monAutreObjet dans ton Form2 (ta classe de base), tu ne pourras pas puisque tu n'as pas de propriété déclarée avec une portée de classe (Form2) !


    Citation Envoyé par petitours Voir le message
    Petite question subsidiaire
    dans ce code fourni plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private Datagridview m_Dgv{ get; set;}
     
    public Form2(Datagridview Dgv)
    {
        InitializeComponent();
        m_Dgv = Dgv;
    }
    A quoi sert le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Datagridview m_Dgv{ get; set;}
    Si je ne me trompe pas c'est une propriété de l'objet Form2 que l'on peut donc lire ou écrire depuis le parent de l'objet. a quo ica sert de créer une telle propriété et de l'initialiser dans le constructeur avec le paramètre passé au constructeur ?
    Merci
    Comme évoqué plus haut, c'est effectivement une propriété avec une portée de classe (Form2), imaginons que tu souhaites effectuer un traitement sur ton datagridview, modifier un row ou autre... qui requiert une modification instantanée avant de retourner sur le form appelant (ex : Form1), tu ne vas pas mettre ton/tes implémentation(s) de traitement dans le constructeur !
    Je parle éventuellement de création de procédure AddRow, RemoveRow, UpdateRow,...etc...... (des fonctions communes qui ensuite pourront être encapsulées dans une classe ....mais ça c'est à toi de voir pour le reste).

    En espérant avoir apporté quelques réponses constructives.

    PS : au passage en relisant ton code plus haut : je pense que dans ton projet tu devras souvent utiliser un objet avec les propriétés suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Description
    HostName
    PortFTP
    portTCP
    LogIn
    cryptage
    Idserveur
    Pourquoi ne pas créer une classe ou une structure avec 2 constructeurs : 1 sans paramètres et l'autre avec un type SQLiteDataReader ???

    Cdlt.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2014, 17h09
  2. Réponses: 3
    Dernier message: 15/04/2012, 10h17
  3. Réponses: 6
    Dernier message: 09/10/2010, 23h07
  4. [C#] Acceder à la méthode d'une autre form
    Par dacid dans le forum Windows Forms
    Réponses: 35
    Dernier message: 23/03/2005, 14h49
  5. Comment basculer le focus depuis une autre form ?
    Par altahir007 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 03/09/2003, 15h54

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