GeoffWilson
GeoffWilson

Reputation: 433

TreeView expanding wrong node

I have a TreeView in a VB.NET/ASP.NET Application.

The TreeView is being Populated programmatically as the page loads. However, when i try and expand a node it is expanding the wrong node.

Example:I have a node with 5 children. Nodes one and two have children and when i try and expand node two it expands node one and when i try and expand node one it also expands node one.

I have tried re-organizing the structure of the TreeView and Also tried adding the nodes in one by one and still no luck.

Edit: Below is the Relevant code from my 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

Upvotes: 0

Views: 433

Answers (1)

DNKROZ
DNKROZ

Reputation: 2852

Sometimes if you have a node which shares the same value as another node - unexpected behavior can occur (one node opening when the other is clicked)

Node values must be unique

Debug your code and ensure that all your nodes have a unique value.

The value will be stored in node.Value

In your case, the node.Value is populated from a table.

Ensure that TakeOffNode.Value = Takeoffrow("Qno") does not equal MPODNode.Value = ManualPODetailsDR("OrderNumber")

Upvotes: 1

Related Questions