2014-05-20 33 views
0

我在VB.NET/ASP.NET应用程序中有一个TreeView。TreeView扩展错误节点

TreeView以页面加载的编程方式填充。但是,当我尝试并展开节点时,它正在扩展错误的节点。

例如:我有一个有5个孩子的节点。节点一和二有孩子,当我尝试和扩大节点二扩大节点之一,当我尝试和扩大节点一它也扩大节点一。

我试过重新组织TreeView的结构,并试图一个一个地添加节点,但仍然没有运气。

编辑: 下面是从我的TreeView的相关代码:

For Each V2MaterialRow In DS.Tables("AllinOne").Rows 
          connection.Open() 
          command = New SqlCommand("Select FormName from ISO where PageTitle='Material Details'", connection) 
          Dim FormName As String = command.ExecuteScalar() 
          connection.Close() 
          V2MaterialNode = New TreeNode 
          V2MaterialNode.ToolTip = "V2 Material Details" 
          V2MaterialNode.Text = FormName & " " & V2MaterialRow("Version") 
          V2MaterialNode.Value = V2MaterialRow("Qno") 
          V2MaterialNode.ShowCheckBox = True 
          V2MaterialNode.NavigateUrl = "V2MaterialDetails.aspx?text=" + V2MaterialRow("Qno") 
          V2MaterialNode.Target = "_blank" 
          node.ChildNodes.Add(V2MaterialNode) 
          connection.Open() 
          command = New SqlCommand("Select * from Specallinone where qno='" + V2MaterialRow("Qno") + "'", connection) 
          datareader = command.ExecuteReader() 
          If datareader.HasRows = False Then 
           datareader.Close() 
           For Each PurchaseOrderRow In DS.Tables("PurchaseOrder").Rows 
            PurchaseOrderNode = New TreeNode 
            PurchaseOrderNode.ToolTip = "Purchase Order" 
            PurchaseOrderNode.Text = "Purchase Order - " + PurchaseOrderRow("supplier") + " " + PurchaseOrderRow("Ordernumber") 
            PurchaseOrderNode.Value = PurchaseOrderRow("Qno") 
            PurchaseOrderNode.NavigateUrl = "PurchaseOrder.aspx?qno=" + PurchaseOrderRow("Qno") + "&Jobno=" + PurchaseOrderRow("JobNumber") + "&Orderno=" + PurchaseOrderRow("Ordernumber") + "&text=" + Replace(PurchaseOrderRow("supplier"), "&", "$") + "" 
            PurchaseOrderNode.Target = "_blank" 
            V2MaterialNode.ChildNodes.Add(PurchaseOrderNode) 
           Next 

          Else 
           datareader.Close() 
          End If 
          connection.Close() 
          For Each LabelRow As DataRow In DS.Tables("AllinOne").Rows 
           Dim Labelnode = New TreeNode 
           Labelnode.ToolTip = "PO Labels" 
           Labelnode.Text = "PO Labels" 
           Labelnode.Value = LabelRow("Qno") 
           'Labelnode.ShowCheckBox = True 
           Labelnode.NavigateUrl = "GeneratePOLabels.aspx?text=" + LabelRow("Qno") 
           Labelnode.Target = "_blank" 
           Try 
            connection.Open() 
            command = New SqlCommand("Select * from purchaseorder where qno='" + LabelRow("Qno") + "' and Jobnumber<>''", connection) 
            datareader = command.ExecuteReader() 
            If datareader.HasRows = False Then 
             datareader.Close() 
             Exit For 
            Else 
             datareader.Close() 
             V2MaterialNode.ChildNodes.Add(Labelnode) 
            End If 
           Catch ex As Exception 
            Messagebox.Show("Error in Dispalying the Labels...") 
           Finally 
            connection.Close() 
           End Try 
          Next 

         Next 
         For Each MPORow In DS.Tables("ManualPO").Rows 
          Dim Supplier As String 
          connection.Open() 
          command = New SqlCommand("Select Distinct Supplier from ManualPurchaseOrder where ManualDetailsId='" + MPORow("ManualDetailsId").ToString + "' ", connection) 
          datareader = command.ExecuteReader() 
          While datareader.Read() 
           Supplier = Supplier + datareader.Item("Supplier") + "," 
          End While 
          datareader.Close() 
          connection.Close() 
          MPONode = New TreeNode 
          MPONode.Value = MPORow("ManualDetailsId") 
          MPONode.Text = "Manual PO " & MPORow("ManualDetailsId") & " Supplier:" & Supplier.ToString 
          Supplier = "" 
          node.ChildNodes.Add(MPONode) 

          Dim ManualPODetailsDa As New SqlDataAdapter("Select distinct supplier,Jobnumber,ordernumber,Qno from PurchaseOrder where Ordernumber in (Select Distinct OrderNumber From ManualPurchaseOrder where ManualDetailsId = '" + MPORow("ManualDetailsId") + "') ", connection) 
          Dim ManualPODetailsDs As New DataSet 
          ManualPODetailsDa.Fill(ManualPODetailsDs) 
          For Each ManualPODetailsDR As DataRow In ManualPODetailsDs.Tables(0).Rows 
           MPODNode = New TreeNode 
           MPODNode.Value = ManualPODetailsDR("OrderNumber") 
           MPODNode.Text = "Purchase Order - " + ManualPODetailsDR("supplier") + " " + ManualPODetailsDR("Ordernumber") 
           MPODNode.NavigateUrl = "PurchaseOrder.aspx?qno=" + ManualPODetailsDR("Qno") + "&Jobno=" + ManualPODetailsDR("JobNumber") + "&Orderno=" + ManualPODetailsDR("Ordernumber") + "&text=" + Replace(ManualPODetailsDR("supplier"), "&", "$") + "" 
           MPODNode.Target = "_blank" 
           MPONode.ChildNodes.Add(MPODNode) 
          Next 
        Next 
        For Each Takeoffrow In DS.Tables("AllinOne").Rows 
         connection.Open() 
         command = New SqlCommand("Select FormName from ISO where PageTitle='Take-Off-Sheets'", connection) 
         Dim FormName As String = command.ExecuteScalar() 
         TakeOffNode = New TreeNode 
         TakeOffNode.ToolTip = "Take Off Sheets" 
         TakeOffNode.Text = FormName & " " & Takeoffrow("Version") 
         TakeOffNode.Value = Takeoffrow("Qno") 
         TakeOffNode.ShowCheckBox = True 
         TakeOffNode.NavigateUrl = "TakeOffSheet.aspx?text=" + Takeoffrow("Qno") 
         TakeOffNode.Target = "_blank" 
         node.ChildNodes.Add(TakeOffNode) 
         command = New SqlCommand("Select count(*) from ManualTakeOffSheet where srecid in (Select Distinct Srecid from Specdetails where Quoteno='" + Takeoffrow("Qno") + "')", connection) 
         Dim MTS As Integer = 0 
         MTS = command.ExecuteScalar() 
         connection.Close() 
         If MTS > 0 Then 
          Dim ManualTakeoffnode As New TreeNode 
          ManualTakeoffnode.ToolTip = "Manual Take Off Sheets" 
          ManualTakeoffnode.Text = "Manual Take Off Sheets" & " " & Takeoffrow("Version") 
          ManualTakeoffnode.Value = Takeoffrow("Qno") 
          ManualTakeoffnode.NavigateUrl = "ManualTakeOffSheet.aspx?text=" + Takeoffrow("Qno") 
          ManualTakeoffnode.Target = "_blank" 
          TakeOffNode.ChildNodes.Add(ManualTakeoffnode) 
         End If 
        Next 
+0

这可能是与'node.value' - 我认为它必须是唯一的。你的一些节点值是否相同? – DNKROZ

+0

没有...所有的孩子节点有不同的值...一个有'材料详细信息',一个有'Take Off Sheet' – GeoffWilson

+0

嗯,也许你可以发布你的treeview代码/任何相关的代码? – DNKROZ

回答

1

有时候,如果你有这股相同的值,另一个节点的节点 - 当对方是可以出现(一个节点开盘意外的行为点击)

节点的值必须是唯一的

调试你的代码,并确保所有节点都具有独特的价值。

值将被存储在node.Value

在你的情况下,node.Value从表中填充。

确保TakeOffNode.Value = Takeoffrow("Qno")不等于MPODNode.Value = ManualPODetailsDR("OrderNumber")