ObjectListView Проверить подпункт программно - PullRequest
0 голосов
/ 07 мая 2018

Как я могу проверить подпункт ObjectListView программно? CheckObject() и CheckObjects() работают только с корневыми элементами, а не с подпунктами.

Я пытался проверить это методом CheckSubItem(), но он не работает. Я также сначала попытался загрузить детей и проверить их с помощью Items[x].Checked = true.

Пример кода:

    public void ReloadChecks(List<ExampleClass> toCheck)
    {
        List<ExampleClass> allProperties = 
        tvTreeView.Objects.Cast<ExampleClass>().ToList();

        tvTreeView.CheckObjects(toCheck.Where(x => x.Parent == null));

        foreach (ExampleClass subitem in toCheck.Where(x => x.Parent != null))
        {

            tvTreeView.CheckSubItem(subitem, tvTreeView.AllColumns[0]);

        }
}

ExampleClass имеет список объектов в качестве дочерних и объект в качестве родительских. Оба атрибута обнуляются. TreeView имеет один заголовок столбца: Флажок | Имя

1 Ответ

0 голосов
/ 29 мая 2018

Я думаю, что здесь происходит неправильное понимание «подпунктов».

Судя по вашему коду, вы имеете дело с TreeListView. Строки, которые отображаются при развертывании объекта верхнего уровня, - это «дети», а не «подпункты».

Для ListView подэлементами являются все ячейки в строке , за исключением ячейка 0 (терминология Microsoft, а не моя).

Итак, этот код успешно проверяет объекты верхнего уровня:

tvTreeView.CheckObjects(toCheck.Where(x => x.Parent == null));

Следующий код ничего не делает, поскольку он пытался проверить подпункт единственного элемента, который не может быть подпунктом (т. Е. Столбец 0):

tvTreeView.CheckSubItem(subitem, tvTreeView.AllColumns[0]);

Чтобы проверить все дочерние объекты, но не объекты верхнего уровня, вы просто должны использовать CheckObjects() снова:

tvTreeView.CheckObjects(toCheck.Where(x => x.Parent != null));

CheckObjects() работает с любым объектом в элементе управления, а не только с объектами верхнего уровня.

...