前段时间写项目文档,发现Word导航栏标题的节点搜索还是蛮有意思的,想着自己也实现一下这样的逻辑。下图就是Word节点搜索时的图。
仔细观察搜索时的行为,可以分析需要实现以下功能:
1、节点递归查找
2、颜色标注匹配节点
3、若匹配节点其父节点尚未展开,则需颜色标注该父节点,表示其子项存在匹配项
4、展开节点时,若节点并非是匹配节点,则取消颜色标注
5、收回节点时,若节点含有匹配子节点,则需按颜色标注
项目中常常用到DevExpress,TreeList中有个CustomDrawNodeCell事件,可以很好控制每个节点显示的颜色。下面就用Winform+Dev控件简单实现这个功能。
界面没什么好说的,就拖几个控件就好。
TreeList数据源,大家可以根据项目需要绑定,我这里是自己随便生成的。
class Data
{
public static DataTable InitData()
{
List<NodeModel> lists = GenerateData();
ModelHandler<NodeModel> modelHandler = new ModelHandler<NodeModel>();
return modelHandler.FillDataTable(lists);
}
public static List<NodeModel> GenerateData()
{
List<NodeModel> lists = new List<NodeModel>() {
new NodeModel(){ID=101 ,PARENTID=100,NAME="第一类"},
new NodeModel(){ID=102 ,PARENTID=100,NAME="第二类"},
new NodeModel(){ID=103 ,PARENTID=100,NAME="第三类"},
new NodeModel(){ID=104 ,PARENTID=100,NAME="第四类"},