如何使用BindingSource WinForms在关系中显示关系

时间:2016-06-01 03:24:44

标签: c# mysql winforms visual-studio data-binding

我有3张桌子,我试图显示它们之间的关系。在表1中,我有一个主要ID字段,这与表2有关,其中包含该主要ID的倍数。

IE:
Table 1

PID        ||  Name
======================
123        ||  SomeName


Table 2
Second ID ||  PID  || Code_ID
===============================
1        ||  123  ||  55
2        ||  123  ||  66


Table 3
Code ID   ||  Code_Description
===============================
55        ||  Some Description 1
66        ||  Some Description 2

我正在使用带有数据网格视图的Windows窗体,使用数据集中的数据绑定和关系。我在表1中的PID和表2中的PID之间存在关系。我可以为该关系设置数据绑定,它将向我显示两者中的1-many行关系。然后,我创建了表2 Code_ID和表3 Code_ID之间的关系。我使用PID作为数据源和我的新Code_ID作为数据成员之间的关系创建了另一个数据绑定。但是,这只显示表3中的一行,并附有正确的描述。

我想做的是在一对多PID关系中显示Code_ID以显示表3中包含的描述,我不知道如何做到这一点。

如果不清楚我会道歉,但是我对这些控制的理解有限,这是最好的描述。我是DB编程的新手,任何建议都将不胜感激!感谢。

1 个答案:

答案 0 :(得分:0)

我对此问题的解决方案最终使用带有DataTable的SQL命令。

为了澄清一些原始问题,我有一个绑定到BindingSource的列表,用户可以滚动浏览。当它们滚动该表中的条目列表时,将显示其他表中的相关条目。在这种情况下,它是三个表之间的关系。

我为列表BindingSource的CurrentChanged事件设置了一个函数。在这里,我使用表2和3之间的内部联接查询数据库,最后一个条件(其中table2.PID =“bindingsource pid”{我使用DataRowView与BindingSource.Current,与DataRowView一起使用以获取相关内容table1 bindingsource PID}

示例代码,如果有人发现自己在这种情况下:

private void ListBindingSource_CurrentChanged(object sender, EventArgs e)
    {
    DataRowView rowView = (DataRowView)ListBindingSource.Current;
    string query = "Inner Join SQL Query Table 2 & 3 /w Where PID = rowView[PIDColumn]";
    SqlConnection connection = new SqlConnection("SQL Connection");
    connection.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = connection;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = query;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable SQLResultTable = new DataTable();
    da.Fill(SQLResultTable);
    dataGridView1.DataSource = SQLResultTable;
    }