显示DataGridView中父项的所有子记录

时间:2014-04-06 14:56:10

标签: c# sql .net datagridview ado.net

我是.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";

2 个答案:

答案 0 :(得分:0)

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

Walkthrough: Creating a Master/Detail Form Using Two Windows Forms DataGridView Controls 是你问题的详细解释。

<强>更新

DataGridView无法与airline_id相关联。我知道你必须在plane_id表中有airline_id

答案 1 :(得分:0)

链接与我在评论中所述相同的列 使用GetChildRows来处理关系

DataRow.GetChildRows