我有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编程的新手,任何建议都将不胜感激!感谢。
答案 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;
}