如何在vb.net应用程序中显示联结表中的记录?

时间:2014-03-17 05:44:38

标签: vb.net

我有两个表,主题和部门,有很多关系。联结表称为Departments_Subjects_junction。我使用sql server dbms。

Subjects:
subjects_id(primary key)
subject_name


Departments:
department_id(primary key)
department_name

Departments_Subjects_junction:
subject_id(primary key)
department_id(primary key)

我可以在所有三个表中存储数据。

现在我想显示供用户查看的记录。 例如,用户必须查看每个部门的所有主题的列表。 像这样:

DepartmentA- Subject1, subject2, subject3, Subject4
DepartmentB- subject2, subject3, subject5
DeparmtentC- subject1, subject3, subject6.

我如何以最佳方式实现这一点?使用datagrid或listview或somethingelse?请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

用于显示数据的控件类型无关紧要,无论是数据网格还是列表视图,都可以正常工作,这一切都取决于您希望它们的外观。所以我冒昧地说,你的问题实际上是针对不同的表查询数据并将其显示在列表中。这纯粹是SQL。

您的表Departments_Subjects_junction不能将其下的两个字段作为主键,因为我看到它的方式,它是定义某个部门具有哪些主题的表。所以它应该是......

Departments_Subjects_junction
department_id(primary key)
subject_id

然后您可以使用此SQL语句进行查询...

SELECT T2.department_name, T3.subject_name
FROM Departments_Subjects_junction T1
INNER JOIN Departments T2
ON T1.department_id=T2.department_id
INNER JOIN Subjects T3
ON T1.subject_id=T3.subject_id;

好的,这就是你要做的......

1)在表单中添加ListView控件。

2)在设计时添加一列。

3)将ListView的View属性设置为Details

4)将此代码添加到任何地方,然后调用它。

Private Sub displaydata()
    Dim item As ListViewItem
    Dim dt As New DataTable

    dt.Clear()
    ListView1.Groups.Clear()
    da = New SqlDataAdapter("SELECT department_name FROM Departments", con) 
    da.Fill(dt)
    For x = 0 To dt.Rows.Count - 1
        ListView1.Groups.Add(dt.Rows(x).Item("department_name"), dt.Rows(x).Item("department_name"))
    Next x

    dt.Clear()
    ListView1.Items.Clear()
    da = New SqlDataAdapter("SELECT T2.department_name, T3.subject_name FROM Departments_Subjects_junction T1 INNER JOIN Departments T2 ON T1.department_id=T2.department_id INNER JOIN Subjects T3 ON T1.subject_id=T3.subject_id ", con) 
    da.Fill(dt)
    For x = 0 To dt.Rows.Count - 1
        item = New ListViewItem
        item.Text = dt.Rows(x).Item("subject_name")
        item.Group = ListView1.Groups(dt.Rows(x).Item("department_name"))
        ListView1.Items.Add(item)
    Next x
    dt.Clear()
End Sub   

这应该有用。