WPF教程

WPF Treeview搜索高亮显示html教程

时间:2013-6-20 0:58:08  作者:WPF之家  来源:http://www.wpf123.com  查看:174  评论:0
内容摘要:    要把树形结构的数据直观的显示出来在WPF中Treeview是最合适的了,我在最近的项目开发中就用到了Treeview。但是Treeview的搜索并且高亮显示却纠结了半天,今天把我用的方法发出来和大家分享一下。  1.Treeview的绑定方法  首先把需要绑定的数据源组合...
  

  要把树形结构的数据直观的显示出来在WPF中Treeview是最合适的了,我在最近的项目开发中就用到了Treeview。但是Treeview的搜索并且高亮显示却纠结了半天,今天把我用的方法发出来和大家分享一下。

  1.Treeview的绑定方法

  首先把需要绑定的数据源组合成一个具有树形结构的list<'自定义类'>

  我的自定义类是这样的

  1. public class EnterpriseList  
  2.   {  
  3.       public List<EnterpriseList> enterpriselist { getset; }  
  4.       public EnterpriseList()  
  5.       {  
  6.           enterpriselist = new List<EnterpriseList>();  
  7.           Parent_Id = -1;  
  8.       }  
  9.       public string Mon { getset; }  
  10.       public int rowcount { getset; }  
  11.       public int Enterpris_Id { getset; }  
  12.       public string Enterpris_No { getset; }  
  13.       public string Enterpris_Name { getset; }  
  14.       public string PYShort { getset; }  
  15.       public string Remark { getset; }  
  16.       public string Address { getset; }  
  17.       public int Trade_Id { getset; }  
  18.       public int PopeDom_Id { getset; }  
  19.       public int Parent_Id { getset; }  
  20.    }  

  然后通过递归给树添加叶子节点treeviewitem 注意:不要直接绑定itemsource

  递归方法如下:

  1. /// <summary>   
  2. /// 递归得到树   
  3. /// </summary>   
  4. /// <param name="list"></param>   
  5. /// <param name="name"></param>   
  6. /// <param name="obj"></param>   
  7. /// <returns></returns>   
  8. private TreeViewItem TreeIn(List<EnterpriseList> list,string name,object obj,int Id,bool IsFirst=true)  
  9. {  
  10.     TreeViewItem trvw = new TreeViewItem();  
  11.     trvw.Header = name;  
  12.     trvw.DataContext = obj;  
  13.     trvw.IsExpanded = true;  
  14.     trvw.Name = "Name"+Id.ToString();  
  15.     trvw.ToolTip = name;  
  16.     List<EnterpriseList>  enter ;  
  17.     if (IsFirst)  
  18.         enter = list[0].enterpriselist;  
  19.     else  
  20.         enter = list;  
  21.     foreach (EnterpriseList lst in enter)  
  22.     {  
  23.       if (lst.enterpriselist != null)  
  24.       trvw.Items.Add(TreeIn(lst.enterpriselist, lst.Enterpris_Name, lst,lst.Enterpris_Id,false));  
  25.     }  
  26.     return trvw;  
  27. }  

  最后会返回一个Treeviewitem,把其添加到已经定义好的Treeview中就能够以树形结构显示了

  树的搜索是通过在treeview上面摆放一个textbox和一个button来实现的,操作方法类似于我们开发环境里面的ctrl+f模糊查询在页面设置当前选择项以及当前数据源并且获取下一个选择项来实现

  过滤数据源的方法:

  1. public List<EnterpriseList> GetFilterResoults(string Pattern, List<EnterpriseList> list)  
  2. {  
  3.   return new List<EnterpriseList>(  
  4.   list.  
  5.   Where((name, match) => name.Enterpris_Name.ToLower().Contains(Pattern.ToLower())));  
  6. }  

  递归查找树的方法

  1. public void TreeViewFind(string Name,ItemCollection Items) {  
  2.     foreach (TreeViewItem tritem in Items) {  
  3.         if (tritem.Header.ToString() == Name)  
  4.         {  
  5.             tritem.Focus();  
  6.             tritem.IsSelected = true;  
  7.             break;  
  8.         }  
  9.        TreeViewFind(Name,tritem.Items);  
  10.     }  
  11. }  

  获取下一个选择项的方法

  1. private bool GetCurrentSelected() {  
  2.         if (CurrentSource.Count>0 &&(CurrentSelected == null || !CurrentSource.Contains(CurrentSelected)))  
  3.         {  
  4.             CurrentSelected = CurrentSource == null ? CurrentSelected : CurrentSource[0];  
  5.         }  
  6.         else if (CurrentSource==null||CurrentSource.Count == 0)  
  7.         {  
  8.             MessageBox.Show("未找到与搜索项匹配的相关内容""搜索", MessageBoxButton.OK, MessageBoxImage.Information);  
  9.             return false;  
  10.         }  
  11.         else {  
  12.             if(CurrentSource.IndexOf(CurrentSelected) + 1>=CurrentSource.Count)  
  13.             {  
  14.                 CurrentSelected = CurrentSource[0];  
  15.                 MessageBox.Show("查找达到了搜索的起始点","搜索",MessageBoxButton.OK,MessageBoxImage.Information);  
  16.             }  
  17.             else{  
  18.                 CurrentSelected =CurrentSource[CurrentSource.IndexOf(CurrentSelected) + 1];  
  19.             }  
  20.         }  
  21.         return true;  
  22.     }  

  窗体里面定义的数据源:

  1. #region 数据源、选择项   
  2.   List<EnterpriseList> AllSource;  
  3.   List<EnterpriseList> CurrentSource;  
  4.   EnterpriseList CurrentSelected;  
  5.   string CurrentText;  
  6.  #endregion  

  本文来自linkiforward的博客,原文地址:http://blog.csdn.net/linkiforward/article/details/6917056


标签:content= 

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。本文出自“wpf之家”,请务必保留此出处:http://www.wpf123.com

相关评论
Copyright © 2009-2014 WPF之家(http://www.wpf123.com/) All rights reserved
 Powered by WPF之家
鄂ICP备13006396号