从ObjectArray正确显示TreeView

时间:2015-07-23 08:38:35

标签: c# winforms treeview

即时创建树视图。

public void CreateTreeView1(TableInfo[] items)
    {
        treeView1.TabStop = false;
        TreeNodeCollection nodes = treeView1.Nodes;

        for (int i = 0; i < items.Length; i++)
        {
            TreeNode newNode = new TreeNode( items[i].Schemaname+"."+items[i].Tablename);
            newNode.Tag = items[i];
            treeView1.Nodes.Add(newNode);

            for (int j = 0; j < service.GibSpaltenNamen(items[i].Tablename).Length; j++)
            {
                newNode = new TreeNode(items[i].Columnname);
                newNode.Tag = items[j];
                treeView1.Nodes[i].Nodes.Add(newNode);
            }
        } 

参数TableInfo []是一个对象数组,包含:schemaname,tablename,columnname,description。全部都充满了信息 但是,虽然创建TreeView不具备这种意义。 我希望这样:

Treeview

感谢Janik
        }

编辑:

 public void CreateTreeView1(TableInfo[] items)
    {
        treeView1.TabStop = false;
        TreeNodeCollection nodes = treeView1.Nodes;

        foreach (TableInfo Tvalue in items)          
        {
            TreeNode newTNode = new TreeNode(Tvalue.Schemaname + "." + Tvalue.Tablename);
            newTNode.Tag = Tvalue;
            treeView1.Nodes.Add(newTNode);


            foreach (ColumnInfo Cvalue in Tvalue.Columns)
            {
                TreeNode newCNode = new TreeNode(Cvalue.Name);
                newCNode.Tag = Cvalue;
                newTNode.Nodes.Add(newCNode);
            }
        }           
    }

这是我的解决方案......

1 个答案:

答案 0 :(得分:1)

假设TableInfo看起来像这样:

class TableInfo
{
    public string SchemaName { get; set; }
    public string TableName { get; set; }
    public string ColumnName { get; set; }
    public string Description { get; set; }
}

您应该先SchemaNameTableName对其进行分组。然后,TreeView的构建变得非常简单:

        treeView1.BeginUpdate();
        try
        {
            var nodes = items
                .GroupBy(_ => string.Format("{0}.{1}", _.SchemaName, _.TableName))
                .Select(_ => new TreeNode(
                    _.Key,
                    _.Select(info => new TreeNode(info.ColumnName)
                    {
                        Tag = info
                    })
                    .ToArray()))
                .ToArray();

            treeView1.Nodes.AddRange(nodes);
        }
        finally
        {
            treeView1.EndUpdate();
        }

注意,我已经省略了顶级节点的Tag初始化,因为它们是对节点进行分组。

相关问题