2008-11-05 8 views
0

Dans un DataGridView lié à un DataView, où les cellules d'une colonne contiennent l'une des deux images d'une ImageList (par exemple, une image verte en ligne ou une image rouge hors ligne)), comment pouvez-vous additionner le nombre d'occurrences de chaque image lors de l'itération à travers les lignes de DataGridView?Comptage du nombre d'occurrences d'images uniques dans un objet DataGridViewImageColumn

Les propriétés Value et FormattedValue de DataGridViewImageCell renvoient des références différentes même si les entrées du DataTable sous-jacent ont été créées en faisant référence à la même Image à partir de ImageList. Donc, au lieu de compter 4 occurrences de 'online' et 6 occurrences de 'offline', j'obtiens 10 occurences d'images différentes.

Répondre

1

Étant donné la description, le mieux que je puisse suggérer est de suivre manuellement la clé/index de l'image dans le .Tag de la cellule, puis d'exécuter votre compte distinct sur le .Tag. Sinon, si vous avez également les données dans une liste/collection, comptez les données de la source d'origine.

[mise à jour réponse suivante] Comme les données sont lié aux données, vous devriez être en mesure de itérer le .Rows du DataGridView, l'obtention du .DataBoundItem de chacun. Ensuite, pour chaque objet sous-jacent, vous devriez être en mesure d'obtenir la valeur de la propriété réelle en utilisant TypeDescriptor:

 string propName = col.DataPropertyName; 
     // could also be a dictionary/hashset etc 
     // could be typed if you know the type 
     List<object> values = new List<object>(); 
     foreach(DataGridViewRow row in dgv.Rows) 
     { 
      object obj = row.DataBoundItem; 
      // could be typed (via cast) if you know the type 
      object val = TypeDescriptor.GetProperties(obj)[propName].GetValue(obj); 
      if (!values.Contains(val)) 
      { 
       values.Add(val); 
      } 
     } 

que toute aide?

+0

Salut Marc - merci pour la réponse. À quel point affecteriez-vous à la propriété Tag de la cellule vu que DataGridView est lié aux données et se remplit automatiquement? – xyz

+0

+ Le DataGridView montre un sous-ensemble de l'ensemble DataTable (en utilisant DataView.RowFilter) et je veux seulement compter dans les lignes en surbrillance (MultiSelect). Donc le back-tracking vers la source de données originale semble difficile – xyz

+0

Je vais mettre à jour pour indiquer ... –

Questions connexes