Как эффективно удалить проверенные объекты из TreeView?

Пожалуйста, попробуйте этот CSS:

@media (max-width: 768px){
    #main-nav ul{
        flex-direction: column;
    }
    .submenu{
        position: relative;
    }
}
7
задан James 5 May 2009 в 15:13
поделиться

4 ответа

Это удалит узлы после их перечисления и может быть использовано рекурсивно для n-ярусов узлов.

void RemoveCheckedNodes(TreeNodeCollection nodes)
{
    List<TreeNode> checkedNodes = new List<TreeNode>();

    foreach (TreeNode node in nodes)
    {
        if (node.Checked)
        {
            checkedNodes.Add(node);
        }
        else
        {
            RemoveCheckedNodes(nodes.ChildNodes);
        }
    }

    foreach (TreeNode checkedNode in checkedNodes)
    {
        nodes.Remove(checkedNode);
    }
}
6
ответ дан 6 December 2019 в 11:52
поделиться

Если вы хотите сделать это эффективно, вам нужно отслеживать проверенные узлы, поскольку они проверены. Сохраните отмеченные узлы дерева в списке (и удалите их, поскольку они не проверены).

Если у вас есть уникальный ключ и множество узлов для отслеживания, вы можете рассмотреть и словарь. Но если вы имеете дело только с 10-50, это, вероятно, не будет иметь большого значения.

Тогда, вместо того, чтобы зацикливаться по всему дереву, вы просто зацикливаетесь на своем (меньшем) списке узлов.

3
ответ дан 6 December 2019 в 11:52
поделиться

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

1
ответ дан 6 December 2019 в 11:52
поделиться

Попробуйте пройти через узлы назад. Таким образом, ваш индекс не будет превышать размер вашего узла:

for( int ndx = nodes.Count; ndx > 0; ndx--)
{
  TreeNode node = nodes[ndx-1];
  if (node.Checked)
  {
     nodes.Remove(node);
  }
   // Recurse through the child nodes...
}
7
ответ дан 6 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: