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

时间:2015-04-18 09:05:37

标签: c# winforms treenode

我有一个名为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});
}

1 个答案:

答案 0 :(得分:1)

为了避免每次递归搜索现有树,我只是将每个节点存储在临时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 );       
}

此外,根据您的需要,创建一个包含对TreeNode的引用的自定义ListItem类可能也很有用。