关于TreeView的问题,折腾我一天了

_NET2004 2008-05-29 02:55:13
这个是数据结构

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时为根节点,否则为子节点(两级就可以了)




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

...全文
292 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
job_2006 2008-05-29
  • 打赏
  • 举报
回复
_NET2004 2008-05-29
  • 打赏
  • 举报
回复

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


改成这样,可以了, 谢谢!
  • 打赏
  • 举报
回复
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 DVP As DataView = MyDS.Tables(0).DefaultView
DVP.RowFilter = "ModuleOrder<>0 AND ModuleParent=" & _
..........

很明显的,自己想想吧。脑子中要有活生生的图像。
游北亮 2008-05-29
  • 打赏
  • 举报
回复
我一般也都是使用DataRow
比如:
Dim DVP As DataView = MyDS.Tables(0).DefaultView
改成:
Dim DVP As DataRow[] = MyDS.Tables(0).Select("ModuleOrder<>0 AND ModuleParent=" & DV.Item(i).Item("ModuleID").ToString())
Jinglecat 2008-05-29
  • 打赏
  • 举报
回复
递归/类似栈访问的时候,最好 DataTable.Select(...) 进行访问 DataRow, 否则容易错误,因为内层循环会改变外层 DataView
Jinglecat 2008-05-29
  • 打赏
  • 举报
回复
什么错误
_NET2004 2008-05-29
  • 打赏
  • 举报
回复
只能显示第一个节点及其子节点,错误信息如下:

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
wxg22526451 2008-05-29
  • 打赏
  • 举报
回复
VB的有点晕。。
出现什么问题??
_NET2004 2008-05-29
  • 打赏
  • 举报
回复
Dim DVP As DataView = MyDS.Tables(0).DefaultView


这句开始有点问题,各位帮帮我啊,VS2005

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧