这个是数据结构
ModuleID ModuleName ModulePage ModuleParent ModuleOrder
1 字典管理 1 0
2 身份管理 b.aspx 1 1
3 用户管理 3 0
4 新增用户 a.aspx 3 1
ModuleID--模块ID,自动增长
ModuleName--名称
ModulePage--页面
ModuleParent--与ModuleID相对应
ModuleOrder--,如果为0时为根节点,否则为子节点(两级就可以了)
- VB.NET code
-
Dim MyDR As SqlDataReader = MyCommand.ExecuteReader() MyDS.Load(MyDR, LoadOption.OverwriteChanges, New String() {"Module"}) Dim DV As DataView = MyDS.Tables(0).DefaultView DV.RowFilter = "ModuleOrder=0" If DV.Count > 0 Then For i As Integer = 0 To DV.Count - 1 Dim TV As TreeNode = New TreeNode With TV .Text = DV.Item(i).Item("ModuleName") .Value = DV.Item(i).Item("ModuleID") .Expanded = False End With TreeView1.Nodes.Add(TV)
-
'这里开始有问题 Dim DVP As DataView = MyDS.Tables(0).DefaultView DVP.RowFilter = "ModuleOrder<>0 AND ModuleParent=" & _ DV.Item(i).Item("ModuleID").ToString() If DVP.Count > 0 Then For j As Integer = 0 To DVP.Count - 1 Dim TVP As TreeNode = New TreeNode With TVP .Text = DVP.Item(j).Item("ModuleName") .Value = DVP.Item(j).Item("ModuleParent") .NavigateUrl = DVP.Item(j).Item("ModulePage").ToString() .Target = "_New" End With TV.ChildNodes.Add(TVP) Next End If Next End If
-
只能显示第一个节点及其子节点,错误信息如下:
System.IndexOutOfRangeException: 索引 1 不是为负数,就是大于行数。 在 System.Data.DataView.GetElement(Int32 index) 在 System.Data.DataView.get_Item(Int32 recordIndex) 在 _Default.FillData() 位置 D:/Programme/WEB/XFMIS/Default.aspx.vb:行号 62 -
-
后面将代码改成如下,问题解决。
-
-
Dim DVP As DataRow() = MyDS.Tables(0).Select("ModuleOrder <>0 " & _ " AND ModuleParent=" & DV.Item(i).Item("ModuleID").ToString()) If DVP.Length > 0 Then For j As Integer = 0 To DVP.Length - 1 Dim TVP As TreeNode = New TreeNode With TVP .Text = DVP(j).Item("ModuleName") .Value = DVP(j).Item("ModuleParent") .NavigateUrl = DVP(j).Item("ModulePage").ToString() .Target = "_New" End With TV.ChildNodes.Add(TVP) Next End If
本文介绍使用VB.NET实现树形菜单的过程,包括从数据库读取数据并填充到TreeView控件的方法。通过调整代码,解决了只能显示第一个节点及其子节点的问题。
9047

被折叠的 条评论
为什么被折叠?



