ObjectListView以编程方式检查子项

时间:2018-05-07 08:30:32

标签: c# objectlistview

如何以编程方式检查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 :(得分:0)

我认为这里存在对“子项目”的误解。

从您的代码中,您似乎正在处理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()适用于控件中的任何对象,而不仅仅是顶级对象。