Остановить падение TreeView при обновлении данных в WinForms - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть элемент управления TreeView, который отображает «Категории» данных с несколькими «Списками» под каждой категорией. У меня есть элемент управления, который удаляет выбранный список в каждой категории и отдельный элемент управления для удаления всей категории.

Когда я запускаю событие удаления списка, все работает отлично, и он вызывает модуль, который обновляет данные, чтобы показать, что удаленный список был удален. Когда это происходит, TreeView свернет все расширенные категории, что нежелательно; главным образом из-за того, что пользователь может пытаться удалить несколько списков и постоянно вынужден go возвращаться в расширенную категорию.

Есть ли строка кода или свойство, которое я могу изменить, чтобы предотвратить такое поведение?

Это процедура, которая обновляет данные и (непреднамеренно) сворачивает TreeView с упрощенными переменными:

Public Sub loadLists(tv As TreeView)
        Dim x As Integer = 0
        Dim pNode() As TreeNode

        ' # Clear the TreeView of previous entries
        tv.Nodes.Clear()

        Using db As New SqlConnection(lgnGetCredentials)
            Using sp As SqlCommand = db.CreateCommand
                Dim sa As SqlDataAdapter = New SqlDataAdapter(sp)
                Dim ds As DataSet = New DataSet()

                ' # Initialise stored procedure to return the categories
                db.Open()
                With sp
                    .CommandText = "dbo.loadCategories"
                    .CommandType = CommandType.StoredProcedure
                End With
                sa.Fill(ds)

                ' # Insert data into Parent nodes
                For Each dr As DataRow In ds.Tables(0).Rows()
                    tv.Nodes.Add(ds.Tables(0).Rows(x)(0).ToString().Trim).Name = ds.Tables(0).Rows(x)(0).ToString
                    x += 1
                Next
                db.Close()
            End Using

            Using sp As SqlCommand = db.CreateCommand
                Dim sa As SqlDataAdapter = New SqlDataAdapter(sp)
                Dim ds As DataSet = New DataSet()

                ' # Initialise stored procedure to return the list title and category
                db.Open()
                With sp
                    .CommandText = "dbo.loadListsWithCategory"
                    .CommandType = CommandType.StoredProcedure
                End With
                sa.Fill(ds)

                ' # Insert Child nodes
                x = 0
                For Each dr As DataRow In ds.Tables(0).Rows()
                    pNode = tv.Nodes.Find(ds.Tables(0).Rows(x)(0).ToString.Trim, True).ToArray
                    pNode(0).Nodes.Add(ds.Tables(0).Rows(x)(1).ToString().Trim)
                    x += 1
                Next
                db.Close()
            End Using
        End Using
    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...