1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    juillet 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2010
    Messages : 66
    Points : 26
    Points
    26

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre régulier Avatar de Olve.OnRollOver
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    mars 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Drôme (Rhône Alpes)

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

    Informations forums :
    Inscription : mars 2012
    Messages : 52
    Points : 90
    Points
    90

    Par défaut

    Bonjour,

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

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    octobre 2004
    Messages
    1 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 1 557
    Points : 958
    Points
    958

    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 actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : décembre 2012
    Messages : 113
    Points : 267
    Points
    267

    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 : 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
     
    // 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]});
       }
    }

Discussions similaires

  1. Explication sur List(Of Object).IndexOf(Object)
    Par Zakapatul dans le forum VB.NET
    Réponses: 2
    Dernier message: 01/12/2008, 15h55
  2. Foreach List d'object
    Par topolino dans le forum ASP.NET
    Réponses: 6
    Dernier message: 25/11/2008, 14h03
  3. parcourir une liste d object
    Par ghnawfal dans le forum JSF
    Réponses: 4
    Dernier message: 11/09/2008, 11h18
  4. Peut faire un Dispose d'une List(Of object) ?
    Par MadLion dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/11/2007, 11h15
  5. List ordre object
    Par drKzs dans le forum java.util
    Réponses: 4
    Dernier message: 14/09/2006, 17h43

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