Member 11866893 Ответов: 1

Нужна помощь с objectlistview-добавление нескольких строк


Я пишу инструмент в vb/windows forms, который будет удалять профили пользователей на удаленных компьютерах. Он отлично работает, за исключением отображения имен компьютеров и профилей, которые были удалены.

Что я уже пробовал:

Когда я пытаюсь ObjectListView, он отображает информацию в первой строке и перезаписывает ее для каждого компьютера и каждого профиля, удаленного на каждом компьютере. Вот та часть кода, с которой у меня возникли проблемы....

Public Class PC
        Public Property Computer_Name As String
        Public Property Profile_Name As String
    End Class

For Each objProfile In colProfiles
                        Dim dtmLastUseTime = CDate(Mid(objProfile.LastUseTime, 5, 2) & "/" &
        Mid(objProfile.LastUseTime, 7, 2) & "/" & VB.Left(objProfile.LastUseTime, 4) _
         & " " & Mid(objProfile.LastUseTime, 9, 2) & ":" &
             Mid(objProfile.LastUseTime, 11, 2) & ":" & Mid(objProfile.LastUseTime,
                 13, 2))
                        If DateDiff("d", dtmLastUseTime, d1) > intMaxProfileAge Then
                            usrPath = objProfile.localpath
                            rowInfo2 = usrPath

                            Dim LvItm As New PC With {.Computer_Name = rowInfo1,
                              .Profile_Name = rowInfo2}
                            Dim LvLst As New List(Of PC)
                            LvLst.Add(LvItm)
                            ObjectListView1.SetObjects(LvLst)
                            
                            objProfile.Delete_
                        End If
                    Next

1 Ответов

Рейтинг:
10

Richard Deeming

Если вы не можете увидеть проблему, глядя на свой код, то вам следует отладить его. Когда вы это сделаете, проблема станет очевидной: вы создаете новый, пустой список на каждой итерации вашего цикла, и только когда-либо добавляя к нему один элемент.

Вам нужно создать список снаружи из петли:

Dim LvLst As New List(Of PC)

For Each objProfile In colProfiles
    Dim dtLastUseTime = ...
    If DateDiff("d", dtmLastUseTime, d1) > intMaxProfileAge Then
        
        Dim LvItm As New PC With { .Computer_Name = rowInfo1,
                              .Profile_Name = objProfile.localpath }
        
        LvLst.Add(LvItm)
        
        objProfile.Delete_
    End If
Next

ObjectListView1.SetObjects(LvLst)