.net / VS2008 / winForm : ListViewGroup
bonjour
je reviens vers vous avec une autre question ..
j'ai créé un composant qui permet de lister récursivement un dossier dans le but d'afficher dans un ListView tous les fichiers et dossiers qu'il contient.
-pour chaque dossier je crée un ListViewGroup
-chaque ListViewItem représente un fichier, il est lié a son ListViewGroup correspondant (a son dossier)
j'ai fait quelques tests avec la racine de mon C:\ mais le nombre de fichiers (271778) et dossiers (27411) rend cette opération trés longue ... surtout que pour chaque fichier il faut récupérer son icône (petite/grande), sa taille, les dates ... etc
donc pour augmenter la vitesse je charge tout d'un coup dans le ListView et je dois dire que ça fonctionne plutôt bien comparé a mes autres tests ...
il me reste un dernier détail a régler, je connais le nombre de fichiers AVANT de créer le conteneur qui sera assigné a Items, je peut donc le déclarer avec la taille : ListViewItem[] _listItems = new ListViewItem[listeFichiers.Count]
malheureusement ceci n'est pas valable pour les répertoires puisque je dois faire la boucle (la longue) sur tous les fichiers pour connaitre les différents répertoire.
le code ressemble a ca :
Code:
1 2 3 4 5 6
| List<ListViewGroup> listGroupTmp = new List<ListViewGroup>();
foreach( string fichier in listeFichiers ) {
// des traitements pour récuperer le dossier de chaque fichier
// le transformer en ListViewGroup
// et l'ajouter a listGroupTmp
} |
donc ne connaissant pas le nombre de répertoire, je ne peux pas déclarer un Array avec une taille fixe :-/
je dois donc passer par le type List<ListViewGroup> qui est dynamique ... seul problème ne ne peux pas l'assigner a ListView.Groups car il n'accepte que le type ListViewGroup[] :?
je dois faire une autre boucle maintenant que je connais le total des dossiers pour le transformer ... un beau gaspillage de ressources :cry:
Code:
1 2 3 4 5 6 7
| ListViewGroup[] arrayGroups = new ListViewGroup[listGroupTmp.Count];
int incGroup = 0;
foreach( ListViewGroup group in listGroupTmp ) {
arrayGroups.SetValue(group, incGroup);
incGroup++;
}
listViewFichier.Groups.AddRange(arrayGroups); |
auriez vous une idée pour éviter cette 2éme boucle ?
en clair : comment convertir un List<ListViewGroup> en ListViewGroup[] ?
merci