在c#中根据DataGridView创建树视图

本文关键字:创建 视图 DataGridView | 更新日期: 2023-09-27 18:15:33

我从两个数据库,db1,db2中获取数据,然后现在我要为结果datagridview中的数据创建treeView;在数据网格视图中有:id, name, director,第一条记录是prim director,表示他没有up director(他是owner),每条记录没有其他记录或有更多记录(子记录),每个子记录有孙子等等,这个场景就像在这个页面中一样:我想创建树视图(父和子和孙子等),取决于xml文件当我使用以下代码片段时:

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();
        }

现在,当我使用这段代码时,我在mark(1)处得到错误,它说:附加信息:序列不包含元素。

thank you

在c#中根据DataGridView创建树视图

在网上查阅了几篇资料并尝试解决这个小问题后,我终于成功了。解决方案如下:

{
.............
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);
                }
            }
        }

如果你从这个代码中受益,我会很高兴。