从现有层次结构列表填充 TreeListView

Populating TreeListView from existing hierarchy list

我有一个名为 Items 的对象列表,我想将其显示在层次结构的 Treelistview 中。对象看起来像这样:

public class ListItem
{
    public int ID;
    public string LabelText;
    public int ParentID;
    public bool Checked;
}

列表顺序确保父项总是先定义。现在我想迭代这个列表并在 Treelistview 中构建我的层次结构。当我在对象中检测到父级时,我可以在 ListView 上搜索已经创建的节点并搜索 ID,但我想知道是否有可能以 ID 作为参考动态创建 TreeNodes,就像这样(有点伪代码);

foreach (ListItem Item in Items)
{
  TreeNode {Item.ID} = new TreeNode()
  {
    Checked = Item.Checked,
    Text = Item.LabelText
  };

  if (Item.ParentID == null)
    DropDown.Nodes.Add({Item.ID});
  else
    {Item.ParentID}.SubItems.Add({Item.ID});
}

为了避免每次都必须递归搜索现有的树,我只是将每个节点存储在一个临时的 Dictionary<int,TreeNode> 中。像这样:

var temp = new Dictionary<int,TreeNode>();
foreach( var item in Items )
{
    var node = new TreeNode()
    {
        Checked = item.Checked,
        Text = Item.LabelText
    };
    temp.Add( item.ID, node );

    if( item.ParentID == 0 )
        DropDown.Nodes.Add( node );
    else
        // TODO: make sure node.ParentId exists in temp here
        temp[node.ParentID].SubItems.Add( node );       
}

此外,根据您的需要,创建一个包含对 ListItem.

的引用的自定义 TreeNode class 可能也很有用