Question : How do I remove existing ListView items and subitems

Hi,
I'm using VB in VS 2005 to create a reusable ListView display. In my program, the user can select one of four categories of information. The first time the ListView is displayed, all colum names and values are shown correctly. Yet when they select another category, most of the values are missing, even though each value is present in the datatable that I pass to the AddListViewItems routine.

I've tried all of Microsoft's methods such as

Dim instance As ListViewGroupCollection
instance.Clear

but the VB .Net 2005 complier always tells me I need an object, but there is no ListViewGroupCollection method in the standard listview control. Can anyone help me out. Thanks in advance for you thoughts.

Art

 Public Sub AddListViewItems(ByVal valuesTable As DataTable)
'''This routine is called numerous time and needs a clean slate each time the user selects another category
        Dim cName As String = ""
        Dim cValue As String = ""
        'Set the view to show details.
        lvInformation.View = View.Details
        'clear the items and their subitems
        For Each lvI As ListViewItem In lvInformation.Items
            lvI.SubItems.Clear()
            lvInformation.Items.Clear()
        Next
       'clear the columns
        lvInformation.Columns.Clear()
        ' Create columns for the items and subitems.
        lvInformation.Columns.Add("Column", 195, HorizontalAlignment.Left)
        lvInformation.Columns.Add("Value", 95, HorizontalAlignment.Right)
        'add the datatable columns for this single returned row
        Dim cCount As Integer = 0
        For i As Integer = 0 To valuesTable.Columns.Count - 1
            cName = valuesTable.Columns(i).ToString
            cValue = valuesTable.Rows(0).Item(i).ToString
            If Not String.IsNullOrEmpty(cValue) Then
                lvInformation.Items.Add(cName, cCount)
                lvInformation.Items(cCount).SubItems.Add(cValue)
                cCount += 1
            End If
        Next
End Sub

Answer : How do I remove existing ListView items and subitems

But to clarify one thing: column is one thing and group is another. clearing the values from listview doesnt have anything to do with clearing ListViewGroupCollection. So you shouldnt mix these two. Now, to clarify few things:

1) ListView1.Columns.Clear - this one clears columns, but doesnt not clear items in listview. For example, lets say you add 2 columns, and then you add 3 items in listview. If you delete columns, then listview will not display any data on it. But that doesnt mean that there arent any items in listview. On the contrary, there are still 3 items in it, only that in order to show items, columns must exist. So, if you would at this point create again 2 columns, items would appear again.

2) ListView1.Items.Clear - this one clears items from ListVIew, Columns are not affected with it.

3) ListView.Clear - this one clears both items and columns.

Now, in your example, what I would first do is to remove the current ListView control from designer, and add new one. This just to make sure you didnt mess up something with groups. Then you should create columns only once. That means you should remove these lines from AddListViewItems procedure

'Set the view to show details.
lvInformation.View = View.Details
' Create columns for the items and subitems.
lvInformation.Columns.Add("Column", 195, HorizontalAlignment.Left)
lvInformation.Columns.Add("Value", 95, HorizontalAlignment.Right)

and place them somewhere on the form_load event. Or set these in designer, If you preffer.

Then the code to populate listview would look like this:

Public Sub AddListViewItems(ByVal valuesTable As DataTable)
        Dim cName As String = ""
        Dim cValue As String = ""

        lvInformation.Items.Clear()

        Dim cCount As Integer = 0

        For i As Integer = 0 To valuesTable.Columns.Count - 1
            cName = valuesTable.Columns(i).ToString
            cValue = valuesTable.Rows(0).Item(i).ToString
            If Not String.IsNullOrEmpty(cValue) Then
                lvInformation.Items.Add(cName, cCount)
                lvInformation.Items(cCount).SubItems.Add(cValue)
                cCount += 1
            End If
        Next
End Sub

Goran
Random Solutions  
 
programming4us programming4us