这是我上一期提问的代码:
Dim node As New TreeNode
Dim lastChapter As String = String.Empty
While dr2.Read()
Dim curChapter = dr2("chapterno").ToString
If curChapter Is Nothing OrElse curChapter <> lastChapter Then
node = New TreeNode(curChapter)
lastChapter = curChapter
geo.Nodes("toc").Nodes.Add(node)
End If
node.Nodes.Add(dr2("lessonno").ToString)
End While
这真的很有帮助,但我有一个问题。在我的系统中,章节表和课程表是不同的表,但相互连接。章节号是课程表的外键。可能会发生章节不包含任何课程,我希望该章节仍然出现在树视图中(名为&#39; geo&#39;)。
非常感谢!
答案 0 :(得分:0)
我想你的两个表都有这个模式:
table Chapter
ChapterNo ==> PK
Title
table Lesson
LessonNo ==> PK
Title
ChapterNo ==> FK to Chapter
现在,如果您想要检索章节的所有章节和课程,那么要准备的查询就是这样的
SELECT c.ChapterNo, c.Title, l.LessonNo, l.Title
FROM Chapter c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo
这将导致每个章节的记录也适用于没有课程的章节,并且每个相关的课程都会重复相同的章节
该查询应该用于填充上面的数据读取器(dr2)并且代码中需要稍微更改以避免在没有课程的情况下读取章节的记录时出现异常
While dr2.Read()
....
if Not IsDBNull(dr2("Lessonno") Then
node.Nodes.Add(dr2("lessonno").ToString)
End If
End While