我有一个名为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});
}
答案 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
类可能也很有用。