【问题标题】:TreeView expanding wrong nodeTreeView 展开错误的节点
【发布时间】:2014-07-08 22:08:39
【问题描述】:

我在 VB.NET/ASP.NET 应用程序中有一个 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

【问题讨论】:

  • 这可能与node.value 有关——我认为它必须是独一无二的。您的某些节点值是否相同?
  • 否......所有子节点都有不同的值......一个有“材料详细信息”,一个有“起飞表”
  • 嗯,也许您可​​以发布您的树视图代码/任何相关代码?
  • 编辑了我的问题以显示相关代码。
  • 那么当您说“尝试扩展节点 2”时,与您的代码相关的是哪个节点?

标签: asp.net vb.net treeview


【解决方案1】:

有时,如果您有一个节点与另一个节点共享相同的值 - 可能会发生意外行为(单击另一个节点时打开一个节点)

节点值必须是唯一的

调试您的代码并确保您的所有节点都具有唯一值。

该值将存储在node.Value

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2011-08-02
    • 2016-11-18
    相关资源
    最近更新 更多