这里需要用到两个控件,是dev的treelist和searchcontrol,首先呢树形控件要形成树形我在这就不多说了
因为这里是记录下searchcontrol这控件的用法
首先写这三行代码,里面都有注释
this.searchControl1.Client = this.treeList1;//设置搜索绑定
treeList1.OptionsBehavior.EnableFiltering = true;//开启过滤功能
treeList1.OptionsFilter.FilterMode = FilterMode.Smart;//过滤模式
经测试,以上就可以完成简单的过滤功能:只负责每个node的displayText和search串的匹配,实现子节点或父节点匹配显示,不匹配隐藏,注:如果子节点匹配,它的父节点为匹配只显示子节点;反之,如果父节点匹配,它的子节点不显示。另外不能实现通过节点的其他属性显示,如拼音首字母。如果需要这些,需要以下的代码。
然后我们构造一个事件,我们称它为过滤事件,
//过滤事件
treeList1.FilterNode += treeList1_FilterNode;
然后在事件中写上代码
void treeList1_FilterNode(object sender, DevExpress.XtraTreeList.FilterNodeEventArgs e)
{
if (treeList1.DataSource == null)
{
return;
}
string NodeText = e.Node.GetDisplayText("ITEM_NAME");//参数填写FieldName
string NodeTextPY = e.Node.GetValue("PINYIN").ToString(); //拼音码搜索
if (string.IsNullOrWhiteSpace(NodeText))
{
return;
}
bool IsVisible = NodeText.ToUpper().IndexOf(txtSearch.Text.ToUpper()) >= 0;
bool IsVisiblePY = NodeTextPY.ToUpper().IndexOf(txtSearch.Text.ToUpper()) >= 0;
if (IsVisible || IsVisiblePY)
{
DevExpress.XtraTreeList.Nodes.TreeListNode Node = e.Node;
while (Node != null)
{
if (!Node.Visible)
{
Node.Visible = true;
Node = Node.ParentNode;
}
else
{
break;
}
}
e.Node.Visible = true;
}
else
{
e.Node.Visible = false;
}
e.Handled = true;
}
e.Handled=true,表示我已经处理当前事件,系统不做处理了。
FilterNode这个事件经跟踪是循环每一个node对其进行判断并处理,显示隐藏。一次筛选有多少个node就会执行多少次此事件。