2012-08-17 3 views
0

Я делал это раньше с помощью DataGridView, но есть ли способ маскировать видимые узлы TreeView, чтобы в событии TextChanged я мог скрывать/фильтровать узлы, которые не содержат текст TextBox? У меня много узлов.Хранить TreeView узлы для фильтрации

В настоящее время это работает, но это функция «удалить только», не добавляет узлов обратно, если я удалю текст из textBox. Заранее спасибо.

//Change in text will hide non matching nodes (remove only) 
for (int i = 0; i<dirTree.Nodes.Count; i++) 
{ 
    if(!dirTree.Nodes[i].Text.Contains(custNameTB.Text)) 
    { 
     dirTree.Nodes.RemoveAt(i); 
    } 
} 

ответ

1

Возможно, держите узел «Мастер» со всеми узлами в качестве детей в памяти. Если текст поиска отсутствует, просто добавьте его в treeview. Затем, если есть введенный текст поиска, перейдите через «главный» узел и используйте его для создания другого отфильтрованного узла (с нужными узлами в виде дочерних элементов) и добавьте его в древовидное представление.

В принципе, вы просто создаете 2 коллекции на узлах. Я со всеми узлами (постоянный) и другой, который имеет только копии желаемого узла (переходный).

0

вы не могли бы сделать ваш узел не виден (Вы должны добавить/удалить его) почему потому как сделать узел видимым и его дочерний узел виден будет трудно (представьте себе десять вложенный узел с 5 не ok ..) Еще одно решение - сохранить вас в дереве (в древовидной структуре, которую вы установили не видимой или в виде данных, но более сложной) и иметь древовидную структуру для отображения, поэтому, если вы удаляете узел, это только на дублированном дереве (не видно treeview останется, и вы не потеряете узлы)

Смежные вопросы