Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Inscrit en
    juillet 2010
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 66
    Points : 5
    Points
    5

    Par défaut DataGridView et List<object>

    Bonjour à tous,

    je rencontre quelques soucis pour gérer une datagridview de trois colonne (A, B, C) et une list<object> nommée DATA

    Voici un bout de code:
    Code :
    1
    2
    3
    4
    5
    6
    if (DATA.Contains("data_str")) {
                        Log_message("data_str");
                        Log_message("index: " + (DATA.IndexOf("data_str")).ToString());
                        dataGridView1.Rows[0].Cells["B"].Value = (String)DATA[(DATA.IndexOf("data_str")) + 1];                            
                    }
    Dans mon code, je check où se trouve une certaine donnée (le contenu de la list peut varier).
    Je récupère bien ma donnée (index+1) dans la list DATA et je l'affiche bien dans la ligne 0 dans la colonne B.

    Mais j'aimerai pouvoir d'abord faire un check du contenu de la colonne B pour voir si la donnée de ma list d'object n'y est pas déjà. Si elle n'y est pas, alors rajouter une ligne avec la donnée (index+1).

    Comment faire en sorte qu'il incrémente automatiquement l'index des rows et qu'il rajoute d'office une ligne automatiquement?

    Bref, je ne sais pas si il existe une manière beaucoup plus propre de peupler une datagridview et je ne vois pas vraiment comment on peut gérer efficacement ce genre d'outil datagridview.

    J'espère que vous pourrez m'aider.

    Un grand merci !

  2. #2
    Nouveau Membre du Club Avatar de Olve.OnRollOver
    Homme Profil pro Olivier
    Développeur/Designer en recherche de poste.
    Inscrit en
    mars 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 26
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur/Designer en recherche de poste.
    Secteur : Services de proximité

    Informations forums :
    Inscription : mars 2012
    Messages : 31
    Points : 36
    Points
    36

    Par défaut

    Bonjour,

    DATA étant une List<T>, peut-être ferais-tu mieux d'utiliser la méthode Find().

  3. #3
    Membre émérite Avatar de shaun_the_sheep
    Homme Profil pro Shaun The Sheep
    Chef de projet NTIC
    Inscrit en
    octobre 2004
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Nom : Homme Shaun The Sheep
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2004
    Messages : 1 478
    Points : 884
    Points
    884

    Par défaut

    Salut,

    peut être que l'utilisation une BindingList plutot qu'une List peut t'aider.

    Si tu modifies ta source donc ta liste d'objet , la Datagrid est mise à jour automatiquement.

  4. #4
    Membre confirmé
    Homme Profil pro François DORIN
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Nom : Homme François DORIN
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : décembre 2012
    Messages : 107
    Points : 227
    Points
    227

    Par défaut

    Bonsoir,

    Comment sont gérées les lignes de ton DataGridView ? Est-ce qu'elles sont créées manuellement ou automatiquement (via l'utilisation de DataSource) ?

    Pour ce que j'ai compris de ton problème, les lignes ont l'air d'être créées manuellement.

    Je vois donc deux possibilités :
    1) On gère tout manuellement
    Dans ce cas, si tu veux rajouter une donnée, il faut créer une nouvelle ligne et l'ajouter ensuite à DataGridView.Rows via la méthode Add.

    2) Utiliser une BindingList.
    Attention, il ne s'agit pas de remplacer ta liste d'objet DATA par une binding list d'objet puisque tu ne sembles pas afficher directement cette liste.

    Il faut passer par une autre liste contenant uniquement les informations que l'on souhaite afficher dans dataGridView1.

    Personnellement, je ferais quelque chose du genre :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    // Initialisation de dataGridView1
    dataGridView1.DataSource = new BindingList<object>();
     
    ...
    // Vérification de l'existence de l'objet et ajout
    // si besoin est
    if (DATA.Contains("data_str")) 
    {
       int index = DATA.IndexOf("data_str") + 1;
       BindingList<object> list = dataGridView.DataSource as BindingList<object>;
     
       if (!list.Contains(DATA[index]))
       {
          // Pas besoin de mettre à jour dataGridView1. La BindingList
          // envoie automatiquement une notification qui lance une mise à
          // jour automatique de dataGridView1
          list.Add(new (){B => DATA[index]});
       }
    }

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •