我有两个表,主题和部门,有很多关系。联结表称为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?请帮忙。感谢。
答案 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
这应该有用。