专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VB Dotnet

哪位给解释一下这段代码,该如何解决

发布时间:2011-06-23 15:25:29 文章来源:www.iduyao.cn 采编人员:星星草
哪位给解释一下这段代码
Public Class Form1 

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
  For i As Int32 = 0 To 4 
  If objStru(i).parentid = 0 Then ' 加入根节点 
  TreeView1.Nodes.Add(CStr(objStru(i).id), CStr(objstru(i).name)) 
  Else ' 加入子节点 
  TreeView1.Nodes(CStr(objStru(i).parentid)).Nodes.Add(CStr(objStru(i).id), CStr(objstru(i).name))
  End If 
  Next 
  End Sub 

End Class


加入子节点部分先通过objStru(i).parentid找出正确的父节点(通过节点的Key来找出,为了区别类型为Int32的Index,必须保证Key是String,所以用Cstr函数强制转换),再加入子节点。 


这段代码是magicbacon 大哥的一段无限级treeview绑定数据库的代码。俺的数据裤结构是ID PRAENTID NAME
为啥子俺每次加载的时候老出现“未将对象引用设置到对象的实例”的错误呢?就是
红色那句(添加子节点的)老出错!俺检查了数据裤没错阿,PRAENTID除了0就是对应的ID值了,是不是
TreeView1.Nodes(CStr(objStru(i).parentid)).Nodes.Add(CStr(objStru(i).id), CStr(objstru(i).name)) 的(CStr(objStru(i).parentid))这里出错了?麻烦各位老大给解决一下。谢谢!!!


------解决方案--------------------
没看出来哪里是实现"无限级"的
------解决方案--------------------
objStru(i).parentid 不为 0的节点的父结点都肯定在树上了?
------解决方案--------------------
如果子节点在其父结点加入之前加入树就会出错
------解决方案--------------------
“未将对象引用设置到对象的实例”说明你操作的对象为Nothing。可以断点调试一下哪些对象为Nothing
------解决方案--------------------
你的objstru()是怎么赋值的?是按你给的数据库表的顺序吗?
------解决方案--------------------
我所做的测试:
VB.NET code

        Dim tbl As New DataTable
        tbl.Columns.Add("id", GetType(System.Int16))
        tbl.Columns.Add("pid", GetType(System.Int16))
        tbl.Columns.Add("name", GetType(System.String))
        Dim dr As DataRow = tbl.NewRow()
        dr(0) = 1
        dr(1) = 0
        dr(2) = "aa"
        tbl.Rows.Add(dr)
        dr = tbl.NewRow()
        dr(0) = 2
        dr(1) = 0
        dr(2) = "bb"
        tbl.Rows.Add(dr)
        dr = tbl.NewRow()
        dr(0) = 3
        dr(1) = 0
        dr(2) = "cc"
        tbl.Rows.Add(dr)
        dr = tbl.NewRow()
        dr(0) = 4
        dr(1) = 0
        dr(2) = "dd"
        tbl.Rows.Add(dr)
        dr = tbl.NewRow()
        dr(0) = 5
        dr(1) = 1
        dr(2) = "ee"
        tbl.Rows.Add(dr)
        dr = tbl.NewRow()
        dr(0) = 6
        dr(1) = 1
        dr(2) = "ff"
        tbl.Rows.Add(dr)
        dr = tbl.NewRow()
        dr(0) = 7
        dr(1) = 1
        dr(2) = "gg"
        tbl.Rows.Add(dr)
        For i As Int16 = 0 To tbl.Rows.Count - 1
            If tbl.Rows(i)(1) = 0 Then
                TreeView1.Nodes.Add(tbl.Rows(i)(0).ToString, tbl.Rows(i)(2).ToString)
            Else
                TreeView1.Nodes(tbl.Rows(i)(1).ToString).Nodes.Add(tbl.Rows(i)(0).ToString, tbl.Rows(i)(2).ToString)
            End If
        Next

------解决方案--------------------
你在调试的时候设置一下监视
把那些变量都监视起来

或者这么更改一下

dim pid as string =CStr(objStru(i).parentid)

dim tid as string =CStr(objStru(i).id)
dim name as string =CStr(objstru(i).name)
 TreeView1.Nodes(pid).Nodes.Add(tid, name )

然后你在看看调试里面说什么
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: