Using loops to get at each item in a ListView?

c#, listview, loops, winforms

Solution

I suggest using IEnumerable as the return type of the method and using "yield return" to return each subitems.

private IEnumerable<ListViewSubItem> GetItemsFromListViewControl()
{                      
    foreach (ListViewItem itemRow in this.loggerlistView.Items)
    {            
        for (int i = 0; i < itemRow.SubItems.Count; i++)
        {
            yield return itemRow.SubItems[i]);
        }
    }
}

although if you are using .NET 3.5 I suggest using LINQ too.

Problem

What is a nice and effective way of getting at each item in a ListView of more than one column using loops? After doing a fair bit of digging around I couldn't really find anything so I when I did find something I wanted to share it on here see if people have better ways of doing it. Also sort of like preempting a question that is bound to come up as I was scratching my head for a bit thinking how do ??? eerrrr .... I ? I like this website so I wanted to share my solution to the question above. Sort of backwards I know but still, I know it will help someone out somwhere. = ) ``` private ArrayList getItemsFromListViewControl() { ArrayList lviItemsArrayList = new ArrayList(); foreach (ListViewItem itemRow in this.loggerlistView.Items) { //lviItemsArrayList.Add(itemRow.Text); <-- Already included in SubItems so ... = ) for (int i = 0; i < itemRow.SubItems.Count; i++) { lviItemsArrayList.Add(itemRow.SubItems[i].Text); // Do something useful here, for example the line above. } } return lviItemsArrayList; } ``` This returns a linear array based representation of all the items belong to a targeted ListView Control in an ArrayList collection object.

Original source