C# 根据C中的DataGridView创建Treeview
我从两个数据库db1和db2中获取数据,然后现在我想为结果datagridview中的数据创建treeView;在datagrid视图中有:id、name、director,第一条记录是prim director,这意味着他没有向上的director他是所有者,每条记录没有其他记录或有更多的recordschild,每个子记录都有孙子,等等,此场景与此页面中的情况类似: 当我在一些之后使用此代码段时:C# 根据C中的DataGridView创建Treeview,c#,database,C#,Database,我从两个数据库db1和db2中获取数据,然后现在我想为结果datagridview中的数据创建treeView;在datagrid视图中有:id、name、director,第一条记录是prim director,这意味着他没有向上的director他是所有者,每条记录没有其他记录或有更多的recordschild,每个子记录都有孙子,等等,此场景与此页面中的情况类似: 当我在一些之后使用此代码段时: void setTree() { {
void setTree()
{
{
foreach(DataGridViewRow dt in DataGridView1.Rows)
{
var per = this.DataGridView1.Rows.Cast<DataGridViewRow>().Select(n => new person
{
name = dt.Cells[0].Value.ToString(),
Sex = dt.Cells[1].Value.ToString(),
Status = dt.Cells[2].Value.ToString(),
child = dt.Cells[3].Value.ToString(),
id = dt.Cells[4].Value.ToString(),
father = dt.Cells[5].Value.ToString()
}).ToList();
var rootTreeNode = GetTree(per, "").First();.........(1)
treeView1.Nodes.Add(rootTreeNode);
}
}
}
private TreeNode[] GetTree(List<person> per, string parent)
{
return per.Where(p => p.father == parent).Select(p =>
{
var node = new TreeNode(p.name);
node.Tag = p.id;
node.Nodes.AddRange(GetTree(per, p.id));
return node;
}).ToArray();
}
现在,当我使用这段代码时,我在mark1处得到错误,它说:附加信息:序列不包含任何元素
谢谢你在网上阅读了几篇文章并试图解决这个小问题后,我终于成功了。 这就是解决方案:
{
.............
TreeNode tn = new TreeNode(this.DataGridView2.Rows[0].Cells[0].Value.ToString());//text
tn.Tag = this.DataGridView2.Rows[0].Cells[4].Value.ToString();// id
tn.Name = this.DataGridView2.Rows[0].Cells[5].Value.ToString();//directorid
treeView1.Nodes.Add(tn);
settree(tn);
}
public void settree(TreeNode ns)
{
foreach (DataGridViewRow dr in DataGridView2.Rows)
{
if (dr.Cells[5].Value.ToString() == ns.Tag.ToString())
{
TreeNode tsn = new TreeNode(dr.Cells[0].Value.ToString());
tsn.Tag = dr.Cells[4].Value.ToString();
tsn.Name = dr.Cells[5].Value.ToString();
ns.Nodes.Add(tsn);
settree(tsn);
}
}
}
如果您能从这段代码中获益,我将非常高兴。如果您有语法错误,请先修复这些错误。语法错误在哪里?