Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Windows > Windows Forms
Windows Forms Forum d'entraide sur le développement Windows Forms & Applications Windows. Avant de poster -> Articles Windows Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/11/2012, 12h08   #1
GGelec
Invité de passage
 
Inscription : juillet 2010
Messages : 66
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 66
Points : 4
Points : 4
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 !
GGelec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 17h39   #2
Olve.OnRollOver
Futur Membre du Club
 
Homme Olivier
Etudiant
Inscription : mars 2012
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Etudiant
Secteur : Services de proximité

Informations forums :
Inscription : mars 2012
Messages : 21
Points : 17
Points : 17
Bonjour,

DATA étant une List<T>, peut-être ferais-tu mieux d'utiliser la méthode Find().
Olve.OnRollOver est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 13h13   #3
shaun_the_sheep
Membre émérite
 
Avatar de shaun_the_sheep
 
Homme Shaun The Sheep
Chef de projet NTIC
Inscription : octobre 2004
Messages : 1 360
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 360
Points : 823
Points : 823
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.
shaun_the_sheep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 22h58   #4
ElTotor
Membre confirmé
 
Homme François DORIN
Chef de Projet
Inscription : décembre 2012
Messages : 104
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 : 104
Points : 226
Points : 226
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]});
   }
}
ElTotor est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h52.


 
 
 
 
Partenaires

Hébergement Web