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

Windows Forms Discussion :

Objet dans DatagridViewRow


Sujet :

Windows Forms

  1. #1
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut Objet dans DatagridViewRow
    bonjour,

    j'ai une classe voiture, à l'intérieur j'override le ToString() pour afficher la marque.

    Je fait une boucle ou j'initialise 50 objets voitures. Je l'ai ajoute au datagridview en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this.MonDatagridView.Rows.Add(newVoiture)
    Tout fonctionne.

    Mon probléme est comment récupéré mon objet voiture quand je clique sur une ligne?

    merci

  2. #2
    Membre éclairé Avatar de guigouz
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 84
    Par défaut
    Bonsoir,

    Je ne sais pas trop comment fonctionne les dataGridView (dans le sens où je ne sais pas s'ils permettent de récupérer tes objets) mais il existe un moyen assez simple de contourner ton problème...
    Tu peux utiliser les collections de C# qui se nomment ArrayList. Ces collections permettent de stocker des objets mais disposent de méthodes pour les récupérer (à partir de l'index par exemple). Cela a des inconvénients puisque lorsque l'on veux appeler directement une méthode stockée dans un ArrayList il faut caster l'objet systématiquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((type)monArrayList).maMethode();
    Il te suffit alors de remplir en premier lieu un ArrayList avec tes objets, puis de remplir ton dataGridView avec l'ArrayList. Quand tu cliques sur une ligne, tu récupère l'indice et tu peux alors retrouver ton objet dans ton ArrayList. Même si cela alourdi pas mal le code il est avantageux de procéder de cette manière car :
    * Toutes tes instances sont regroupées dans une structure de données conçue a cette effet
    * Il est conseillé d'adopter une structure de stockage indépendante de l'IHM pour une plus grande évolutivité du code

    Bonne continuation !
    Guigouz

  3. #3
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    parfait merci

  4. #4
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Je trouve la methode de guigouz pertinante
    Sinon tu peux utilisé la propriété Tag de chaque Row
    ainsi tu aura

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object obj = datagridView1.Rows[0].Tag;
    c'est plus beau à voir mais je ne sais pas coté perfermance si ca coute ou pas

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Tu peux aussi utiliser la propriété "DataSource" de la grille, qui est faite pour ça.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Ce qui me gène dans les propositions sur le Tag ou l'indice de l'array list, c'est qu'en cas de tri ou de filtrage on perd la relation avec les objets.

    La solution que j'utilise consiste à identifier les objets par une clé unique (éventuellement l'indice dans le tableau d'objet, si il ny a pas de suppressions d'objets) et à créér dans le DatagridView une colonne supplémentaire pour cette clé.

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

Discussions similaires

  1. [VB.NET] Suppression d'objets dans une collection
    Par master56 dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/06/2010, 21h46
  2. acceder a un objet dans un CPropertySheet
    Par ludoviskm dans le forum MFC
    Réponses: 6
    Dernier message: 21/11/2004, 08h58
  3. [CR9] redimensionner un objet dans la section détail !
    Par LIM dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 27/04/2004, 18h19
  4. Mettre un objet dans un TListView
    Par FredericB dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/04/2004, 09h32
  5. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55

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