2010-12-10 34 views
8

Dans VS2005, en utilisant C#, j'ai une application Forms avec ListView. Je peux très bien ajouter des éléments à la liste. Cependant, dès que j'essaie de trier ces éléments en groupes, ils n'apparaissent pas. Je sais que les groupes n'apparaissent pas lorsqu'ils sont vides, mais j'ai confirmé que ces groupes ne sont pas vides. En outre, je suis paramètre listView.ShowGroups = true. Si j'ajoute des éléments à l'un des groupes, mais pas à la seconde, le groupe "Default" apparaît ... ce sont les groupes que j'ai ajoutés qui n'apparaissent pas!C# ListView apparaît vide avec les groupes

Voici le code que je utilise:

this.listView.View = View.Details; 
this.listView.Columns.Add("Column1"); 
this.listView.Columns[0].Width = this.listView.Width - 20; 
this.listView.HeaderStyle = ColumnHeaderStyle.None; 
this.listView.Groups.Add(new ListViewGroup("A")); 
this.listView.Groups.Add(new ListViewGroup("D")); 


foreach(item i in Class.Items) 
{ 
    if (i.Type == Type.A) 
     this.listView.Groups[0].Items.Add(i.Name); 
    else 
     this.listView.Groups[1].Items.Add(i.Name); 
} 
this.listView.ShowGroups = true; 

Est-ce que quelqu'un a des idées pour expliquer pourquoi mes groupes ne se présentent pas? Voici une capture d'écran de ce que je vois:

alt text

+3

+1 pour la capture d'écran humoristique. –

Répondre

11

Vous ne devez pas ajouter des éléments au groupe, mais plutôt d'ajouter des éléments à la vue de la liste, et pour chaque élément mis sa propriété Group au groupe désiré .

Vous pouvez voir un exemple dans ce MSDN link

+0

C'est ce qu'il a fait. Euh, ça ne me semble pas naturel de me le faire, mais ... apparemment, c'est ce qui avait du sens pour MSFT à l'époque. Merci! – JToland

+3

@JToland: Je suppose que l'une des raisons possibles est que vous pouvez facilement déplacer des éléments d'un groupe à l'autre au moment de l'exécution sans avoir à recréer l'objet. Mais plus probablement, c'est aussi lié au fait que les groupes ne sont pas affichés sous les versions de Windows antérieures à XP, donc les éléments doivent appartenir au 'ListView' lui-même afin d'être affichés du tout dans cet environnement. –

+2

@Cody: Oui, vous avez probablement raison. De toute façon, je suis d'accord avec JToland ce n'est pas vraiment intuitif: D – digEmAll

5

Si des éléments sont ajoutés à la listview alors que la valeur ShowGroups est définie sur false et la propriété ShowGroups est ensuite définie sur true, la zone de liste apparaît vide tout en montrant des groupes (mais avec un contenu lorsque ShowGroups est faux).

ShowGroups doit être vrai lors de la construction de la liste.

La synchronisation est également importante. La zone de liste doit être rendue avant que la propriété ShowGroups soit définie sur false. Je l'ai mis dans mon événement de dialogue montré. J'ai découvert cela en travaillant avec .Net 4.0.