2014-05-20 146 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")