在 DataGridView 中显示父级的所有子记录

本文关键字:记录 DataGridView 显示 | 更新日期: 2023-09-27 17:56:52

我是 .NET 的新手,我真的不明白它是如何工作的。我有这个项目必须做,我被要求显示所有父记录,当我选择父记录时,应该显示它的所有子记录。到目前为止,我设法使用 DataGridView 显示所有父记录。

private void display_btn_Click(object sender, EventArgs e)
        {
            dg.DataSource = data_set.Tables[0];
        }

以下代码有效,但它显示子项的所有记录。我知道我应该以某种方式将父项的主键与子项的外键进行比较,并仅显示与父项的PK相等的项项,但我不知道该怎么写。

private void dg_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            dg2.DataSource = data_set.Tables[1];
        }

用于创建关系的代码

 DataColumn parentColumn = data_set.Tables["Airline"].Columns["airline_id"];
                DataColumn childColumn = data_set.Tables["Plane"].Columns["airline_id"];
                rel_pln_air = new DataRelation("fk_pln_air", parentColumn, childColumn);
                data_set.Relations.Add(rel_pln_air);

绑定代码:

parentBindingSource.DataSource = data_set;
            parentBindingSource.DataMember = "Airline";
            childBindingSource.DataSource = parentBindingSource;
            childBindingSource.DataMember = "Plane";

在 DataGridView 中显示父级的所有子记录

您必须在数据集中定义Tables[1]Tables[2]之间的 mster-details 关系。然后,您必须将子DataGridViewDataSource设置为该关系。

演练:使用两个 Windows 窗体创建大纲/详细信息窗体 DataGridView 控件是对您的问题的详细说明。

更新

airline_id不能与plane_id相关。我认为您在表格plane有必须参考的airline_id

链接我在评论
中所述的同一列使用 GetChildRows 遍历关系

DataRow.GetChildRows