2009-06-29 8 views
0

Ceci est un problème étrange, je n'ai pas ajouté beaucoup de code car je ne sais pas comment commencer. J'ai un contrôle listview en mode virtuel, si je filtre la listview pour me montrer toutes les personnes appelées John, je vois alors 3 utilisateurs appelés John, puis j'annule le filtre en réglant toutes les valeurs sur null et retourne toutes les données à la listview, je maintenant avoir plusieurs centaines d'éléments dans la liste mais je ne peux voir 30 à l'écran que si je fais défiler la liste. J'utilise ensuite le code ci-dessous pour cocher une case dans chaque rangée, tous sont vérifiés en dehors des 3 Johns mais si je peux voir 1 des 3 Johns dans la liste sans faire défiler puis exécuter le code ci-dessous le John visible est vérifié.ListView impossible de cocher une case

for (int i = 0; i < this._items.Count; i++) 
      { 

        this._items[i].Checked = true; 
      } 

J'ai vérifié l'état de la case juste avant qu'il ne soit vérifié dans le code ci-dessus et si John est visible alors la case à cocher estime qu'il est sans contrôle (faux), si elle n'est pas visible, il belives, il est vérifié (vrai). Donc, avoir un John visible à l'écran, la case n'est pas cochée et un test prouve qu'il n'est pas coché, pour les deux Johns je ne peux pas voir qu'ils croient qu'ils sont vérifiés mais si je descends pour les voir, ils ne le sont pas.

Des idées?

+0

A quelles occasions avez-vous peuplez la collection this._items? –

Répondre

1

Out-of-the-box, listviews .NET (WinForms Les) en mode virtuel ne supporte pas les cases à cocher. Ils fonctionnent de manière peu fiable et donnent lieu à d'étranges bugs. Je n'ai jamais vu celui que vous décrivez, mais cela ne me surprend pas.

Votre solution est soit:

  1. utiliser une des cases à cocher ListView
  2. utiliser un ObjectListView, qui prend en charge non virtuel sur les listes virtuelles
0

J'ai exactement le même problème et je ne suis pas en mode virtuel. J'ai exécuté le programme en mode debug et bien que l'instruction:

listView1.Items [count] .Checked = true;

est exécuté ('count' étant un compteur fonctionnel), les cases à cocher dans ma listview ne seront pas vérifiées. Parfois, un ou deux d'entre eux seront sans raison apparente, même si la ligne est lue pour toutes les cases à cocher qui veulent être vérifiées ...

Je serais très intéressé par tout point culminant!

Merci, christophe

Questions connexes