c#选择父节点,并在datagridview中显示所有子节点
我有一个名为“mechanical”的表,它有递归,主id是“id\u mechanical”,递归是“id\u Chief”。 我在c#选择父节点,并在datagridview中显示所有子节点,c#,winforms,psql,C#,Winforms,Psql,我有一个名为“mechanical”的表,它有递归,主id是“id\u mechanical”,递归是“id\u Chief”。 我在Datagridiew中显示所有机制。 在TreeView中,我展示了所有的父和子机制。 我的问题是,如何创建这样的节点,当我选择父节点时,它的所有子节点都显示在Datagridiew中 编写如何创建节点的代码- public void FillTree(TreeNodeCollection tn, int? id) { NpgsqlCom
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);
泰
p.S.数据库是在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";
}
编辑:林克
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";
DataTable newTable=mechanicdt.AsEnumerable()
其中(i=>i.Field(“ID\u”)==null)
.OrderByDescending(i=>i.Field(“姓氏”))
.CopyToDataTable();
DataGridViewMechanical.DataSource=newTable;
DataGridViewMechanical.DataMember=“mch”;
处理树状视图项上的单击事件,并填充数据网格视图的项源。@ShivaniKatukota好的,我知道如何只显示child,但它只显示第一个父项child,如果我单击“其他”,它会显示给我,我怎么能这样做?你能发布你尝试过的代码和它不起作用的代码吗?@ShivaniKatukota在post中添加了“编辑”代码,这是因为你正在用相同的数据集实例化数据源。在方法AfterSelect中,使用linq过滤数据集mechanicdt,仅过滤那些将发件人作为父级的成员