从 ObjectArray 正确显示 TreeView
correct Displaying of TreeView from ObjectArray
我正在创建树视图。
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[] 是一个对象数组,其中包含:架构名称、表名称、列名称、说明。全部填满信息
但是在创建 TreeView 时没有那个意义。
我想要这样:
谢谢贾尼克
}
编辑:
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);
}
}
}
这是我的解决方案...
假设 TableInfo
看起来像这样:
class TableInfo
{
public string SchemaName { get; set; }
public string TableName { get; set; }
public string ColumnName { get; set; }
public string Description { get; set; }
}
你应该先按 SchemaName
和 TableName
分组。那么,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
初始化,因为它们是分组节点。
我正在创建树视图。
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[] 是一个对象数组,其中包含:架构名称、表名称、列名称、说明。全部填满信息 但是在创建 TreeView 时没有那个意义。 我想要这样:
谢谢贾尼克
}
编辑:
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);
}
}
}
这是我的解决方案...
假设 TableInfo
看起来像这样:
class TableInfo
{
public string SchemaName { get; set; }
public string TableName { get; set; }
public string ColumnName { get; set; }
public string Description { get; set; }
}
你应该先按 SchemaName
和 TableName
分组。那么,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
初始化,因为它们是分组节点。