从现有层次结构列表填充 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 可能也很有用
我有一个名为 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 可能也很有用