web development 2005 Express Edition Beta
网上找的asp1.1的代码改了之后还没实现,郁闷1个星期了,异常信息   System.IndexOutOfRangeException: There is no row at position 1.   此行的问题:  tmpNd.Value = drv("UserId").ToString
代码如下
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Not IsPostBack Then
            CreateDataSet()                '数据集就省略了
            intiTree(TreeView1.Nodes, "0")
        End If
    End Sub
    
    Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentId As String)
        Dim dv As New DataView()
        Dim drv As DataRowView
        Dim tmpNd As TreeNode
        Dim StrId As String
        dv = ds.Tables("Users").DefaultView
        dv.RowFilter = "ParentId=" + parentId        
        For Each drv In dv
            tmpNd = New TreeNode()
            tmpNd.Value = drv("UserId").ToString
            StrId = tmpNd.Value
            tmpNd.Text = drv("UserName").ToString
            'tmpNd.ImageUrl = drv("ICON").ToString 
            Nds.Add(tmpNd)
            intiTree(Nds(Nds.Count - 1).ChildNodes, StrId)   '        
        Next
        
        ' End If
    End Sub
说明:数据库字段为UserId UserName ParentID ,ParentID为父节点的UserId

解决方案 »

  1.   

    另外:如何判断dv.RowFilter得到的为空;即在数据库中找不到父节点为指定节点的记录
    本来网上的例子中intiTree(Nds(Nds.Count - 1).ChildNodes, StrId) 一行应该是 intiTree(Nds(Nds.Count - 1).Nodes, StrId) 的,但是asp2.0中 treenode 没有 nodes这个属性了,只有childnodes,换成这个了,
      

  2.   

    我觉得问题就在于2。0版中,drv为空行的时候不能赋值给别的变量
    tmpNd.Value = drv("UserId").ToString但是不清楚如何在之前判断dataview dv为空
      

  3.   

    在fro each前加一行判断  If (dv.Count > 0) Then
      

  4.   

    要不要改成c#了给楼上的看啊,只要能解决问题就行,楼上的高手,如何阿
    cugnet的方法试过了,还是
    异常信息   System.IndexOutOfRangeException: There is no row at position 1.   
    此行的问题:  tmpNd.Value = drv("UserId").ToString
      

  5.   

    http://www.channel7.cn/2004/12-5/14201.html
    看看有没有帮助
      

  6.   

    我觉得现在2.0里面用tree的更好办法是在数据库里面的储存过程直接生成一个xml,然后把xml绑定到tree里面。