首页 > 解决方案 > c# 选择父节点,并在datagridview中显示所有子节点

问题描述

我有一个名为“Mechanic”的表,它具有递归,主 ID 是“ID_Mechanic”,递归是“ID_Chief”。我在Datagridiew. 在 中TreeView,我展示了所有的父子机制。我的问题是,如何创建以便当我选择父节点时,它的所有子节点都显示在Datagridiew

编写我如何创建节点的代码 -

public void FillTree(TreeNodeCollection tn, int? id)
    {
        NpgsqlCommand cmdtreeview = new NpgsqlCommand("select * from mechanic where id_chief is null", ncon);
        if (id != null)
        {
            cmdtreeview = new NpgsqlCommand("select * from mechanic where id_chief =@id_mechanic", ncon);
            cmdtreeview.Parameters.Add(new NpgsqlParameter("id_mechanic", id));
        }
        NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmdtreeview);
        DataTable dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow dr in dt.Rows)
        {
            String newdatarow = dr["name"].ToString() + " " + dr["surname"].ToString();
            TreeNode node = new TreeNode(newdatarow);
            tn.Add(node);
            FillTree(node.Nodes, (int?)dr["id_mechanic"]);
        }
    }

充满 -

FillTree(treeViewMechanic.Nodes, null);

我的意思的视觉形象

泰!

PS 数据库是在 PostgreSQL 中创建的。

编辑:编码我的工作,但只显示第一父母的孩子。

 DataSet ds = new DataSet();
 ds.Tables.Add(mechanicdt);
 ds.Relations.Add(new DataRelation("mch", mechanicdt.Columns[0], 
 mechanicdt.Columns[6], true));
 private void AfterSelect(object sender, TreeViewEventArgs e)
   {
        dataGridViewMechanic.DataSource = mechanicdt;
        dataGridViewMechanic.DataMember = "mch";        
   }

编辑:LINQ

   DataTable newTable = mechanicdt.AsEnumerable()
             .Where(i => i.Field<String>("ID_Mechanic") == null)
             .OrderByDescending(i => i.Field<String>("Surname"))
             .CopyToDataTable();

        dataGridViewMechanic.DataSource = newTable;
        dataGridViewMechanic.DataMember = "mch";          

标签: c#winformspsql

解决方案


推荐阅读