【问题标题】:Populate treeview with Duplicate Keys使用重复键填充树视图
【发布时间】:2018-01-25 07:20:43
【问题描述】:

我在不使用 Infragistics Framework 的 ID 或 PARENTID 的情况下创建了树视图。效果很好。

但有时子节点名称会变得相同。这对我来说没问题。

这是我填充treeview 的代码。基本上按“类型”分组。哪些是根节点。然后使用“名称”为该根节点添加子节点

private void populateTreeview(DataTable dt)
{
    var groups = dt.AsEnumerable().GroupBy(x => x.Field<string>("Type"));

    foreach (var group in groups)
    {
        UltraTreeNode node = utObjects.Nodes.Add(group.Key);

        foreach (string name in group.Select(x => x.Field<string>("Name")))
        {
            node.Nodes.Add(name); // Throws an error here : 'Key Already Exist'
        }
    }
}

如何允许重复键?

【问题讨论】:

    标签: c# winforms treeview infragistics


    【解决方案1】:

    您不能允许重复的键。
    根据Key property documentation

    整个 UltraTree 控件中的键必须是唯一的。

    Add 方法的文档显示了 5 个重载。
    One 其中接受两个字符串 - 第一个是键,另一个是文本。
    您应该使用此重载将节点添加到树中。
    您可以选择要设置密钥的任何方法,我认为对您当前代码影响最小的最简单方法是使用 Guid.NewGuid().ToString() 作为密钥。 Guid 实际上保证是唯一的:

    private void populateTreeview(DataTable dt)
        {
            var groups = dt.AsEnumerable().GroupBy(x => x.Field<string>("Type"));
    
            foreach (var group in groups)
            {
                UltraTreeNode node = utObjects.Nodes.Add(group.Key);
    
                foreach (string name in group.Select(x => x.Field<string>("Name")))
                {
                    // Generates a unique key for each node.
                    node.Nodes.Add(Guid.NewGuid().ToString(), name); 
                }
            }
        }
    

    【讨论】:

    • 你,先生。你是最棒的。
    • 不是很远,但谢谢:-)。很高兴帮助:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多