Let There Be Code RSS 2.0
# Wednesday, October 28, 2009

Voici une petite méthode d’extension qui permet d’effectuer une recherche de manière récursive dans un treeview en lui spécifiant un prédicat :

public static class TreeNodeExtension
{
	public static IEnumerable<TreeNode> FindNodes(this TreeNodeCollection nodesCollection, Func<TreeNode, bool> predicate)
	{
		var nodes = nodesCollection.Cast<TreeNode>();
		return nodes.SelectMany(n => FindNodes(n.Nodes, predicate).Union(nodes.Where(n2 => predicate(n2))));
	}
}
Le SelectMany permet de mettre à plat l’appel récursif. Si on utilise un Select à la place du SelectMany on obtient une liste de liste de nœud. Le SelectMany est l’équivalent de 2 from comme ceci :
return 	from n in nodes
		from child in n.Nodes
		where predicate(child)
		select child;

Pour l’utiliser ce n’est pas bien compliqué…

Je voudrai récupérer la liste des TreeNode de type FileNode et qui sont sélectionnés :

var checkedFilesNode = treeView1.Nodes.FindNodes(n => n is FileNode && n.Checked == true);
Wednesday, October 28, 2009 12:18:07 PM (Paris, Madrid, UTC+01:00)  #    Voir Commentaires
C# | Linq
Archive
<March 2010>
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2010
Benoît Laut
Sign In
All Content © 2010, Benoît Laut
DasBlog theme 'Business' created by Christoph De Baene (delarou)