TreeList不像Grid那样方便的过滤操作,这里使用FilterNode实现行过滤查找,废话不多说,直接上代码:
private void trlOrg_FilterNode(object sender, DevExpress.XtraTreeList.FilterNodeEventArgs e)
{
List<TreeListColumn> filteredColumns = e.Node.TreeList.Columns.Cast<TreeListColumn>(
).Where(c => c.FilterInfo.AutoFilterRowValue != null).ToList();
if (filteredColumns.Count == 0) return;
e.Handled = true;
e.Node.Visible = filteredColumns.Any(c => IsNodeMatchFilter(e.Node, c));
}
static bool IsNodeMatchFilter(TreeListNode node, TreeListColumn column)
{
string filterValue = column.FilterInfo.AutoFilterRowValue.ToString();
if (node.GetDisplayText(column).Contains(filterValue)) return true;
foreach (TreeListNode n in node.Nodes)
if (IsNodeMatchFilter(n, column)) return true;
return false;
}
补充说明:treelist控件的这两个属性要设置:
treelist1.OptionsBehavior.EnableFiltering = True;
treelist1.OptionsFind.AlwaysVisible = True;