WPF Treeview搜索高亮显示
来源:互联网 发布:中国10大网络视频排名 编辑:程序博客网 时间:2024/06/02 04:10
要把树形结构的数据直观的显示出来在WPF中Treeview是最合适的了,我在最近的项目开发中就用到了Treeview。但是Treeview的搜索并且高亮显示却纠结了半天,今天把我用的方法发出来和大家分享一下。
1.Treeview的绑定方法
首先把需要绑定的数据源组合成一个具有树形结构的list<'自定义类'>
我的自定义类是这样的
public class EnterpriseList { public List<EnterpriseList> enterpriselist { get; set; } public EnterpriseList() { enterpriselist = new List<EnterpriseList>(); Parent_Id = -1; } public string Mon { get; set; } public int rowcount { get; set; } public int Enterpris_Id { get; set; } public string Enterpris_No { get; set; } public string Enterpris_Name { get; set; } public string PYShort { get; set; } public string Remark { get; set; } public string Address { get; set; } public int Trade_Id { get; set; } public int PopeDom_Id { get; set; } public int Parent_Id { get; set; } }
然后通过递归给树添加叶子节点treeviewitem 注意:不要直接绑定itemsource
递归方法如下:
/// <summary> /// 递归得到树 /// </summary> /// <param name="list"></param> /// <param name="name"></param> /// <param name="obj"></param> /// <returns></returns> private TreeViewItem TreeIn(List<EnterpriseList> list,string name,object obj,int Id,bool IsFirst=true) { TreeViewItem trvw = new TreeViewItem(); trvw.Header = name; trvw.DataContext = obj; trvw.IsExpanded = true; trvw.Name = "Name"+Id.ToString(); trvw.ToolTip = name; List<EnterpriseList> enter ; if (IsFirst) enter = list[0].enterpriselist; else enter = list; foreach (EnterpriseList lst in enter) { if (lst.enterpriselist != null) trvw.Items.Add(TreeIn(lst.enterpriselist, lst.Enterpris_Name, lst,lst.Enterpris_Id,false)); } return trvw; }
最后会返回一个Treeviewitem,把其添加到已经定义好的Treeview中就能够以树形结构显示了
树的搜索是通过在treeview上面摆放一个textbox和一个button来实现的,操作方法类似于我们开发环境里面的ctrl+f模糊查询在页面设置当前选择项以及当前数据源并且获取下一个选择项来实现
过滤数据源的方法:
public List<EnterpriseList> GetFilterResoults(string Pattern, List<EnterpriseList> list) { return new List<EnterpriseList>( list. Where((name, match) => name.Enterpris_Name.ToLower().Contains(Pattern.ToLower()))); }
递归查找树的方法
public void TreeViewFind(string Name,ItemCollection Items) { foreach (TreeViewItem tritem in Items) { if (tritem.Header.ToString() == Name) { tritem.Focus(); tritem.IsSelected = true; break; } TreeViewFind(Name,tritem.Items); } }
获取下一个选择项的方法
private bool GetCurrentSelected() { if (CurrentSource.Count>0 &&(CurrentSelected == null || !CurrentSource.Contains(CurrentSelected))) { CurrentSelected = CurrentSource == null ? CurrentSelected : CurrentSource[0]; } else if (CurrentSource==null||CurrentSource.Count == 0) { MessageBox.Show("未找到与搜索项匹配的相关内容", "搜索", MessageBoxButton.OK, MessageBoxImage.Information); return false; } else { if(CurrentSource.IndexOf(CurrentSelected) + 1>=CurrentSource.Count) { CurrentSelected = CurrentSource[0]; MessageBox.Show("查找达到了搜索的起始点","搜索",MessageBoxButton.OK,MessageBoxImage.Information); } else{ CurrentSelected =CurrentSource[CurrentSource.IndexOf(CurrentSelected) + 1]; } } return true; }
窗体里面定义的数据源:
#region 数据源、选择项 List<EnterpriseList> AllSource; List<EnterpriseList> CurrentSource; EnterpriseList CurrentSelected; string CurrentText; #endregion
- WPF Treeview搜索高亮显示
- WPF搜索关键字高亮显示
- 搜索结果高亮显示
- 搜索关键字显示高亮
- 搜索结果高亮显示
- 页面高亮显示搜索关键字
- 搜索关键字高亮显示方法
- 搜索关键字高亮显示方法
- 取消 VI 搜索高亮显示
- Android ListView 搜索关键字高亮显示
- php搜索结果关键词高亮显示
- hibernate search搜索结果高亮显示
- jquery highlight 搜索结果高亮显示
- Android开发:高亮显示搜索结果
- Lucene+HighLighter 搜索关键字高亮显示
- jquery高亮显示搜索的关键字
- 搜索结果的高亮显示实现
- 搜索结果高亮显示函数
- cron 学习笔记
- 我思故我在系列—数据结构NO.26题(题目搜集整理者JULY,非常感谢!!)
- 用androidpn来实现推送
- 通过iBatis的queryForMap方法比较resultClass与resultMap
- 顺序存储结构的线性表
- WPF Treeview搜索高亮显示
- sql server2005 的集中版本
- Ext2那些事儿(二)
- GTK+ 的gtk_dialog_run 返回值备注
- 石油主管道最优位置问题(平均时间为线性时间)C++实现
- Android网络游戏之神农诀项目开发--视频观看地址
- Linux source code Makefile分析
- SQL语句优化技术
- 重启博客之旅