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 :

Liste typée dans un datagridView


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 Liste typée dans un datagridView
    Bonjour

    Je souhaite saisir des données de ce type dans un datagridview pour pouvoir les traiter
    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
    class Cycle
        {
            private UInt16 _AdresseDebut;
            public UInt16 AdresseDebut
            {
                get { return _AdresseDebut; }
                set { _AdresseDebut = value; }
            }
     
            private Byte _NbdeMots;
            public Byte NbdeMots
            {
                get { return _NbdeMots; }
                set { _NbdeMots = value; }
            }
     
            private Byte _Fonction;
            public Byte Fonction
            {
                get { return _Fonction; }
                set { _Fonction = value; }
            }
        }
    Dans mes rêves j’imaginais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Cycle mycycle = new Cycle() ;
    datagridView.DataSource = mycycle ;
    mais évidement le datagridview n'affiche pas de colonnes comme ca.

    J'ai lu qu'il fallait passer par un Datatable et effectivement si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DataTable dt = new DataTable();
                dt.Columns.Add("AdresseDebut", System.Type.GetType("System.UInt16"));
                dt.Columns.Add("NbdeMots",System.Type.GetType("System.Byte"));
                dt.Columns.Add("Fonction", System.Type.GetType("System.Byte"));
     
                dataGridView1.DataSource = dt;
    j'ai bien mes colonnes et je peux ajouter les éléments.

    La question 1 :
    Y a t-il un moyen de remplir automatiquement un Objet Cycle à partir de la DataTable et inversement (remplir la Datatable et datagridView à partir d'un objet Cycle) autrement que à la brut force ligne par ligne ?

    La question 2 ; Il me semble plus propre de passer par une classe bien structurée pour "cadrer les données". Le DatagridView peut il prendre la structure de cette classe sans avoir à définir manuellement les colonnes comme je l'ai fait dans mon essai ?

    Merci par avance

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    Tout es possible ! Avec un peu d'huile de coude .

    La datasource est toujours énumérée, il te faut donc une collection.
    Tu peut mettre des object Cycle dans une List<Cycle> (ou alors tu te crée une list typé qui implémente IEnumerable<Cycle>).
    Tu ajoute un DataSource que tu type comme Cycle, et tu le mets comme source de ta datagridview.
    Tu mets ta collection de cycle dans le datasource, et la ta datagridview sera remplie, et si tu modifie un élément dans la datagridview, l'object Cycle correspondant sera modifié.

    Avance étape par étape et dit nous ou tu coince.

    Bon code,
    J@ck

  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

    Merci pour la réponse. je viens de retenter des choses à tête reposée et je coince au même endroit
    Si je fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Cycle> mylist = new List<Cycle>();
    j'ai bien un datagridview avec des colonnes qui correspondent à la structure de ma classe Cycle mais je ne peux pas ajouter d'élément dans le datagridview. => comment ajouter des éléments à la List<Cyle> à partir du DataGridView ?

    Si je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DataTable dt = new DataTable();
                dt.Columns.Add("AdresseDebut", System.Type.GetType("System.UInt16"));
                dt.Columns.Add("NbdeMots",System.Type.GetType("System.Byte"));
                dt.Columns.Add("Fonction", System.Type.GetType("System.Byte"));
     
                dataGridView1.DataSource = dt;
    j'ai bien un datagridView dans lequel je peux ajouter des choses mais c'est nul parce que la structure de la Datasource est construite à la main, sans lien avec une collection d'objets de type Cycle.

    Merci

  4. #4
    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
    en passant par un BindingSource ca semble aller beaucoup mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                List<Cycle> mylist = new List<Cycle>();
                var source = new BindingSource();
                source.DataSource = mylist;
                dataGridView1.DataSource = source;
    là je peux saisir dans le datagridView sans avori eu à le structurer en plus de la structure de la List<Cycle>

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Salut

    il faut à la fois utiliser la propriété DataSource de la gridview mais surtout utiliser un DataBinding qui lui, va te permettre de créer depuis la DGV des nouveaux
    éléments dans ta liste qui aura servi de Datasource.

    En gros,

    DataBinding.Datasource = taListe;
    DGV.DataSource = DataBinding;

  6. #6
    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
    Citation Envoyé par theMonz31 Voir le message
    Salut

    il faut à la fois utiliser la propriété DataSource de la gridview mais surtout utiliser un DataBinding qui lui, va te permettre de créer depuis la DGV des nouveaux
    éléments dans ta liste qui aura servi de Datasource.

    En gros,

    DataBinding.Datasource = taListe;
    DGV.DataSource = DataBinding;
    Merci, j'ai trouvé et posté dans la même minute !

    Mais je vais tester cette technique du bouble clic de J@ckHerror. L'idée de ne pas avoir cette ligne "de création" dans le datagridView me plait bien, d'un point de vue ergonomie je n'ai jamais aimé voir listé une ligne qui n'existe en fait pas.

    Merci

  7. #7
    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
    Avec la list<objet> et ajout d'un élément par double click sur le datagridView je ne m'en sors pas, le datagridview n'affiche pas la mise à jour et il me faut passer par un vilain
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    datagridView1.DataSource = null ;
    datagridView1.DataSource = myList ;
    pour obtenir cette mise à jour

    Je me suis donc rabattu vers le BindingList<Cycle> qui semble être l'équivalent du passage par une Bindinsource intermédiaire (je me trompe ?)

    mais j'ai gardé l'ajout de ligne via bouton ou double click et mettant en false la propriété dataGridView1.AllowUserToAddRows pour ne pas avori la ligne d'ajout pas jolie.

    Je commence à m'y retrouver dans la logique du Databinding !! Merci

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Si tu as bindé ta List<Cycle> sur la datagridview alors il te suffit de rajouter un object dans la liste pour rajouter une ligne à la datagridview, ensuite tu pourras modifier l'object directement depuis la datagridview.
    Par exemple tu ajoute un object à la liste sur un click de bouton ou sur un double click sur la datagridview.

    J@ck.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/12/2015, 16h50
  2. Nouveau type dans une liste
    Par jc2001 dans le forum SharePoint
    Réponses: 0
    Dernier message: 09/06/2008, 11h27
  3. [J2SE 5.0] Insérer plusieurs type dans une liste. Et les récupérer!
    Par HebusBreizh dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/09/2007, 15h32
  4. [Generics] ajouter un élement dans une liste typée
    Par anitshka dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/02/2007, 11h04
  5. liste déroulante dans un datagridview
    Par robocop2776 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/01/2007, 21h20

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