Quantcast
Channel: VBForums
Viewing all articles
Browse latest Browse all 15454

VS 2019 Fundamental work with Datatable and Treeview

$
0
0
Hi,
I am coming with maybe silly question but I just cant figure it out.
I have started project, not small from my point of view but I relisted after finishing first part that I handle in this program so big data that it will be really bad for user to maintain the data.
It is going to be software for sales. At this point I have created database for the basic items. Every item is branched in tree view in 4 levels. In 4th level user could add any hourly based or price items. It comes from another library (data table) witch will maintained by purchase department (price, supplier, date of validate, ect). In the main data table of the library I have every item from Treeview in datarow where I have cca 16 columns (ID in treeview, Text, Tooltip, Parent , Fullpath and values (type of node) value currency, validation ect).
When I started coding I worked with cca 50 items (50x cca 25 nodes) and everything worked good and fast. Than I made imported and imported all 2500 item what we currently work with in sales. It is 125000 datarows to work with everytime something changes.

My question is how to handle the data and update the treeview. Id already did some changes like, I loaded datatable to 2d array and loop thru it (it helped little). I tried to avoid dirty loops by exit for after finding and calling Sub to handle. But I think that I do fundamentally something wrong. Is there someone who could help me with it, I just want to work with sotcha big data in comfortable way, but I cant figure out how.

I paste here two codes, first is to load treeview after opening library. Second is Sub what is for update and recalculation of all parents and update icons by validation.



Code:

Public Sub loadTreviewLibrabryTest()
        Me.TreeView2.Nodes.Clear()
        Dim dt As DataTable = DsUsers.dtUsers
        Dim new_node As TreeNode

        Debug.Print("Start load tree: " & Now)

        Dim a()() As Object = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr.ItemArray).ToArray

        For j As Integer = 0 To a.GetLength(0) - 1
            If a(j)(NodeType).ToString = "Bs" Then
                new_node = New TreeNode(a(j)(NodeID))
                new_node.Name = a(j)(NodeID).ToString
                new_node.Text = a(j)(NodeText).ToString
                new_node.ImageIndex = a(j)(NodeImageIndex)
                new_node.SelectedImageIndex = a(j)(NodeImageIndex)
                If Not a(j)(NodeText2).ToString Is Nothing Then new_node.ToolTipText = a(j)(NodeText2).ToString
                Me.TreeView2.Nodes.Add(new_node)
            ElseIf a(j)(NodeType).ToString = "Mech" Then
                new_node = New TreeNode(a(j)(NodeID))
                new_node.Name = a(j)(NodeID).ToString
                new_node.Text = a(j)(NodeText).ToString
                new_node.ImageIndex = a(j)(NodeImageIndex)
                new_node.SelectedImageIndex = a(j)(NodeImageIndex)
                If Not a(j)(NodeText2).ToString Is Nothing Then new_node.ToolTipText = a(j)(NodeText2).ToString
                Dim no() As TreeNode = Me.TreeView2.Nodes.Find((a(j)(NodeParent)), True)
                no(0).Nodes.Add(new_node)
            ElseIf a(j)(NodeType).ToString = "Ele" Then
                new_node = New TreeNode(a(j)(NodeID))
                new_node.Name = a(j)(NodeID).ToString
                new_node.Text = a(j)(NodeText).ToString
                new_node.ImageIndex = a(j)(NodeImageIndex)
                new_node.SelectedImageIndex = a(j)(NodeImageIndex)
                If Not a(j)(NodeText2).ToString Is Nothing Then new_node.ToolTipText = a(j)(NodeText2).ToString
                Dim no() As TreeNode = Me.TreeView2.Nodes.Find((a(j)(NodeParent)), True)
                no(0).Nodes.Add(new_node)
            ElseIf a(j)(NodeType).ToString = "Area" Then
                new_node = New TreeNode(a(j)(NodeID))
                new_node.Name = a(j)(NodeID).ToString
                new_node.Text = a(j)(NodeText).ToString
                new_node.ImageIndex = a(j)(NodeImageIndex)
                new_node.SelectedImageIndex = a(j)(NodeImageIndex)
                If Not a(j)(NodeText2).ToString Is Nothing Then new_node.ToolTipText = a(j)(NodeText2).ToString
                Dim no() As TreeNode = Me.TreeView2.Nodes.Find((a(j)(NodeParent)), True)
                no(0).Nodes.Add(new_node)
            ElseIf a(j)(NodeType).ToString = "Price" Then
                new_node = New TreeNode(a(j)(NodeID))
                new_node.Name = a(j)(NodeID).ToString
                new_node.Text = a(j)(NodeText).ToString
                new_node.ImageIndex = a(j)(NodeImageIndex)
                new_node.SelectedImageIndex = a(j)(NodeImageIndex)
                If Not a(j)(NodeText2).ToString Is Nothing Then new_node.ToolTipText = a(j)(NodeText2).ToString
                Dim no() As TreeNode = Me.TreeView2.Nodes.Find((a(j)(NodeParent)), True)
                no(0).Nodes.Add(new_node)
            ElseIf a(j)(NodeType).ToString = "Hours" Then
                new_node = New TreeNode(a(j)(NodeID))
                new_node.Name = a(j)(NodeID).ToString
                new_node.Text = a(j)(NodeText).ToString
                new_node.ImageIndex = a(j)(NodeImageIndex)
                new_node.SelectedImageIndex = a(j)(NodeImageIndex)
                If Not a(j)(NodeText2).ToString Is Nothing Then new_node.ToolTipText = a(j)(NodeText2).ToString
                Dim no() As TreeNode = Me.TreeView2.Nodes.Find((a(j)(NodeParent)), True)
                no(0).Nodes.Add(new_node)
            End If

        Next

        Debug.Print("End load tree: " & Now)
    End Sub

Code:


  Public Sub Validate_changes(ByVal ID As Integer)
        Dim found_node As Boolean = False
        Dim dt As DataTable = DsUsers.dtUsers
        Dim Pr As DataTable = DsLibSet.dsPriceMirrior
        Dim Ip As DataTable = DsLibSet.dsIntPerf
        Dim Red As Integer
        Dim green As Integer
        Dim Value As Double
        Dim Valid As Date

        Debug.Print("Start validate changes: " & Now)

        For Each R As DataRow In dt.Rows
            If R.Item("NodeID").ToString = ID Then

                If R.Item("NodeType").ToString = "Price" Then
                    found_node = False
                    For Each P As DataRow In Pr.Rows
                        If P.Item("PrMiName").ToString = R.Item("NodeName").ToString Then
                            R.Item("NodeValueCurrencey") = P.Item("PrMiCur").ToString
                            R.Item("NodePriceItemUnitPrice") = P.Item("PrMiPrice").ToString
                            R.Item("NodeValue") = R.Item("ItemAmount") * P.Item("PrMiPrice").ToString
                            R.Item("NodeText") = P.Item("PrMiName").ToString & " (" & R.Item("ItemAmount").ToString & " x " & R.Item("NodePriceItemUnitPrice").ToString & R.Item("NodeValueCurrencey").ToString & ")"

                            If P.Item("PrValidType").ToString = "Local" Then
                                If P.Item("PrValid") = Nothing Or R.Item("NodeValid") = "1.1.1900" Or R.Item("NodeValid") = "1.1.0001" Then
                                    R.Item("NodeValid") = DBNull.Value
                                    R.Item("NodeImageIndex") = 16
                                    R.Item("NodeText2") = "No validation"
                                Else
                                    R.Item("NodeValid") = P.Item("PrValid")
                                    R.Item("NodeImageIndex") = 15
                                    R.Item("NodeText2") = "Validated on " & R.Item("NodeValid").ToString
                                End If
                            ElseIf P.Item("PrValidType").ToString = "External" Then
                                If R.Item("NodeValid") = Nothing Or R.Item("NodeValid") = "1.1.1900" Or R.Item("NodeValid") = "1.1.0001" Then
                                    R.Item("NodeImageIndex") = 16
                                    R.Item("NodeText2") = "No validation"
                                Else
                                    R.Item("NodeImageIndex") = 15
                                    R.Item("NodeText2") = "Validated on " & R.Item("NodeValid").ToString
                                End If
                            End If
                            found_node = True
                        End If
                    Next
                    If found_node = False Then
                        R.Item("NodeImageIndex") = 18
                        R.Item("NodeText") = R.Item("NodeText") & " Not found in Price List"
                    End If

                    Dim no() As TreeNode = Me.TreeView2.Nodes.Find(R.Item("NodeID"), True)
                    no(0).Text = R.Item("NodeText")
                    no(0).ImageIndex = R.Item("NodeImageIndex")
                    no(0).SelectedImageIndex = R.Item("NodeImageIndex")
                    If Not R.Item("NodeText2") Is Nothing Then no(0).ToolTipText = R.Item("NodeText2").ToString
                    Call Validate_changes(R.Item("NodeParent"))

                ElseIf R.Item("NodeType").ToString = "Hours" Then
                    found_node = False
                    For Each P As DataRow In Ip.Rows
                        If P.Item("InPerName").ToString = R.Item("NodeName").ToString Then
                            R.Item("NodeValueCurrencey") = P.Item("InPerCur").ToString
                            R.Item("NodeHrRate") = P.Item("InPerRate").ToString
                            R.Item("NodePriceItemUnitPrice") = P.Item("InPerHrs") * HrRateValue(P.Item("InPerRate"))
                            R.Item("NodeValue") = R.Item("NodeHrAmount") * R.Item("NodePriceItemUnitPrice")
                            R.Item("NodeText") = R.Item("NodeName").ToString & " (" & R.Item("NodeHrAmount").ToString & " x " & R.Item("NodePriceItemUnitPrice").ToString & R.Item("NodeValueCurrencey").ToString & ")"
                            If P.Item("InValidType").ToString = "Local" Then
                                If P.Item("InValid") = Nothing Or R.Item("NodeValid") = "1.1.1900" Or R.Item("NodeValid") = "1.1.0001" Then
                                    R.Item("NodeValid") = DBNull.Value
                                    R.Item("NodeImageIndex") = 13
                                    R.Item("NodeText2") = "No validation"
                                Else
                                    R.Item("NodeValid") = P.Item("InValid")
                                    R.Item("NodeImageIndex") = 12
                                    R.Item("NodeText2") = "Validated on " & R.Item("NodeValid").ToString
                                End If
                            ElseIf P.Item("InValidType").ToString = "External" Then
                                If R.Item("NodeValid") = Nothing Or R.Item("NodeValid") = "1.1.1900" Or R.Item("NodeValid") = "1.1.0001" Then
                                    R.Item("NodeImageIndex") = 13
                                    R.Item("NodeText2") = "No validation"
                                Else
                                    R.Item("NodeImageIndex") = 12
                                    R.Item("NodeText2") = "Validated on " & R.Item("NodeValid").ToString
                                End If
                            End If
                            found_node = True
                        End If
                    Next
                    If found_node = False Then
                        R.Item("NodeImageIndex") = 18
                        R.Item("NodeText") = R.Item("NodeText") & " Not found in Internal performance List"
                    End If
                    Dim no() As TreeNode = Me.TreeView2.Nodes.Find(R.Item("NodeID"), True)
                    no(0).Text = R.Item("NodeText")
                    no(0).ImageIndex = R.Item("NodeImageIndex")
                    no(0).SelectedImageIndex = R.Item("NodeImageIndex")
                    If Not R.Item("NodeText2") Is Nothing Then no(0).ToolTipText = R.Item("NodeText2").ToString
                    Call Validate_changes(R.Item("NodeParent"))

                ElseIf R.Item("NodeType").ToString = "Area" Then
                    Red = 0
                    green = 0
                    Value = 0
                    Valid = Today
                    R.Item("NodeValueCurrencey") = GenCurencey
                    For Each P As DataRow In dt.Rows
                        If P.Item("NodeParent").ToString = R.Item("NodeID").ToString Then
                            If P.Item("NodeImageIndex") = 12 Or P.Item("NodeImageIndex") = 15 Then green = green + 1
                            If P.Item("NodeImageIndex") = 13 Or P.Item("NodeImageIndex") = 16 Or P.Item("NodeImageIndex") = 18 Then Red = Red + 1
                            If IsDBNull(P.Item("NodeValueCurrencey")) = False Then Value = Value + CurenceyTransfer(GenCurencey, P.Item("NodeValueCurrencey"), P.Item("NodeValue"))
                            If P.Item("NodeValid") < Valid Then Valid = P.Item("NodeValid")
                        End If
                    Next
                    R.Item("NodeValue") = Value
                    R.Item("NodeValid") = Valid
                    If green > 0 And Red = 0 Then
                        R.Item("NodeImageIndex") = 9
                    ElseIf Red > 0 Then
                        R.Item("NodeImageIndex") = 10
                    Else
                        R.Item("NodeImageIndex") = 11
                    End If
                    Dim no() As TreeNode = Me.TreeView2.Nodes.Find(R.Item("NodeID"), True)
                    no(0).Text = R.Item("NodeText")
                    no(0).ImageIndex = R.Item("NodeImageIndex")
                    no(0).SelectedImageIndex = R.Item("NodeImageIndex")
                    If Not R.Item("NodeText2") Is Nothing Then no(0).ToolTipText = R.Item("NodeText2").ToString
                    Call Validate_changes(R.Item("NodeParent"))

                ElseIf R.Item("NodeType").ToString = "Mech" Then
                    Red = 0
                    green = 0
                    Value = 0
                    Valid = Today
                    R.Item("NodeValueCurrencey") = GenCurencey
                    For Each P As DataRow In dt.Rows
                        If P.Item("NodeParent").ToString = R.Item("NodeID").ToString Then
                            If P.Item("NodeImageIndex") = 9 Then green = green + 1
                            If P.Item("NodeImageIndex") = 10 Or P.Item("NodeImageIndex") = 18 Then Red = Red + 1
                            If IsDBNull(P.Item("NodeValueCurrencey")) = False Then Value = Value + CurenceyTransfer(GenCurencey, P.Item("NodeValueCurrencey"), P.Item("NodeValue"))
                            If P.Item("NodeValid") < Valid Then Valid = P.Item("NodeValid")
                        End If
                    Next
                    R.Item("NodeValue") = Value
                    R.Item("NodeValid") = Valid
                    If green > 0 And Red = 0 Then
                        R.Item("NodeImageIndex") = 3
                    ElseIf Red > 0 Then
                        R.Item("NodeImageIndex") = 4
                    Else
                        R.Item("NodeImageIndex") = 5
                    End If
                    Dim no() As TreeNode = Me.TreeView2.Nodes.Find(R.Item("NodeID"), True)
                    no(0).Text = R.Item("NodeText")
                    no(0).ImageIndex = R.Item("NodeImageIndex")
                    no(0).SelectedImageIndex = R.Item("NodeImageIndex")
                    If Not R.Item("NodeText2") Is Nothing Then no(0).ToolTipText = R.Item("NodeText2").ToString
                    Call Validate_changes(R.Item("NodeParent"))

                ElseIf R.Item("NodeType").ToString = "Ele" Then
                    Red = 0
                    green = 0
                    Value = 0
                    Valid = Today
                    R.Item("NodeValueCurrencey") = GenCurencey
                    For Each P As DataRow In dt.Rows
                        If P.Item("NodeParent").ToString = R.Item("NodeID").ToString Then
                            If P.Item("NodeImageIndex") = 9 Then green = green + 1
                            If P.Item("NodeImageIndex") = 10 Or P.Item("NodeImageIndex") = 18 Then Red = Red + 1
                            If IsDBNull(P.Item("NodeValueCurrencey")) = False Then Value = Value + CurenceyTransfer(GenCurencey, P.Item("NodeValueCurrencey"), P.Item("NodeValue"))
                            If P.Item("NodeValid") < Valid Then Valid = P.Item("NodeValid")
                        End If
                    Next
                    R.Item("NodeValue") = Value
                    R.Item("NodeValid") = Valid
                    If green > 0 And Red = 0 Then
                        R.Item("NodeImageIndex") = 6
                    ElseIf Red > 0 Then
                        R.Item("NodeImageIndex") = 7
                    Else
                        R.Item("NodeImageIndex") = 8
                    End If
                    Dim no() As TreeNode = Me.TreeView2.Nodes.Find(R.Item("NodeID"), True)
                    no(0).Text = R.Item("NodeText")
                    no(0).ImageIndex = R.Item("NodeImageIndex")
                    no(0).SelectedImageIndex = R.Item("NodeImageIndex")
                    If Not R.Item("NodeText2") Is Nothing Then no(0).ToolTipText = R.Item("NodeText2").ToString
                    Call Validate_changes(R.Item("NodeParent"))

                ElseIf R.Item("NodeType").ToString = "Bs" Then
                    Red = 0
                    green = 0
                    Value = 0
                    Valid = Today
                    R.Item("NodeValueCurrencey") = GenCurencey
                    For Each P As DataRow In dt.Rows
                        If P.Item("NodeParent").ToString = R.Item("NodeID").ToString Then
                            If P.Item("NodeImageIndex") = 3 Or P.Item("NodeImageIndex") = 6 Then green = green + 1
                            If P.Item("NodeImageIndex") = 4 Or P.Item("NodeImageIndex") = 7 Or P.Item("NodeImageIndex") = 18 Then Red = Red + 1
                            If IsDBNull(P.Item("NodeValueCurrencey")) = False Then Value = Value + CurenceyTransfer(GenCurencey, P.Item("NodeValueCurrencey"), P.Item("NodeValue"))
                            If P.Item("NodeValid") < Valid Then Valid = P.Item("NodeValid")
                        End If
                    Next
                    R.Item("NodeValue") = Value
                    R.Item("NodeValid") = Valid
                    If green > 0 And Red = 0 Then
                        R.Item("NodeImageIndex") = 0
                    ElseIf Red > 0 Then
                        R.Item("NodeImageIndex") = 1
                    Else
                        R.Item("NodeImageIndex") = 2
                    End If
                    Dim no() As TreeNode = Me.TreeView2.Nodes.Find(R.Item("NodeID"), True)
                    no(0).Text = R.Item("NodeText")
                    no(0).ImageIndex = R.Item("NodeImageIndex")
                    no(0).SelectedImageIndex = R.Item("NodeImageIndex")
                    If Not R.Item("NodeText2") Is Nothing Then no(0).ToolTipText = R.Item("NodeText2").ToString

                End If

            End If
        Next
        Debug.Print("End validate changes: " & Now)
    End Sub


Viewing all articles
Browse latest Browse all 15454

Trending Articles