Tutorial :C#: How to add subitems in ListView



Question:

Creating an item(Under the key) is easy,but how to add subitems(Value)?

listView1.Columns.Add("Key");  listView1.Columns.Add("Value");  listView1.Items.Add("sdasdasdasd");  //How to add "asdasdasd" under value?  


Solution:1

Like this:

ListViewItem lvi = new ListViewItem();  lvi.SubItems.Add("SubItem");  listView1.Items.Add(lvi);  


Solution:2

You whack the subitems into an array and add the array as a list item.

The order in which you add values to the array dictates the column they appear under so think of your sub item headings as [0],[1],[2] etc.

Here's a code sample:

//In this example an array of three items is added to a three column listview  string[] saLvwItem = new string[3];    foreach (string wholeitem in listofitems)  {       saLvwItem[0] = "Status Message";       saLvwItem[1] = wholeitem;       saLvwItem[2] = DateTime.Now.ToString("dddd dd/MM/yyyy - HH:mm:ss");         ListViewItem lvi = new ListViewItem(saLvwItem);         lvwMyListView.Items.Add(lvi);  }  


Solution:3

Suppose you have a List Collection containing many items to show in a ListView, take the following example that iterates through the List Collection:

foreach (Inspection inspection in anInspector.getInspections())    {      ListViewItem item = new ListViewItem();      item.Text=anInspector.getInspectorName().ToString();      item.SubItems.Add(inspection.getInspectionDate().ToShortDateString());      item.SubItems.Add(inspection.getHouse().getAddress().ToString());      item.SubItems.Add(inspection.getHouse().getValue().ToString("C"));      listView1.Items.Add(item);    }  

That code produces the following output in the ListView (of course depending how many items you have in the List Collection):

Basically the first column is a listviewitem containing many subitems (other columns). It may seem strange but listview is very flexible, you could even build a windows-like file explorer with it!


Solution:4

I've refined this using an extension method on the ListViewItemsCollection. In my opinion it makes the calling code more concise and also promotes more general reuse.

internal static class ListViewItemCollectionExtender  {      internal static void AddWithTextAndSubItems(                                     this ListView.ListViewItemCollection col,                                      string text, params string[] subItems)      {          var item = new ListViewItem(text);          foreach (var subItem in subItems)          {              item.SubItems.Add(subItem);          }          col.Add(item);      }  }  

Calling the AddWithTextAndSubItems looks like this:

// can have many sub items as it's string array  myListViewControl.Items.AddWithTextAndSubItems("Text", "Sub Item 1", "Sub Item 2");   

Hope this helps!


Solution:5

I think the quickest/neatest way to do this:

For each class have string[] obj.ToListViewItem() method and then do this:

foreach(var item in personList)  {      listView1.Items.Add(new ListViewItem(item.ToListViewItem()));  }  

Here is an example definition

public class Person  {      public string Name { get; set; }      public string Address { get; set; }      public DateTime DOB { get; set; }      public uint ID { get; set; }        public string[] ToListViewItem()      {          return new string[] {              ID.ToString("000000"),              Name,              Address,              DOB.ToShortDateString()          };      }  }  

As an added bonus you can have a static method that returns ColumnHeader[] list for setting up the listview columns with

listView1.Columns.AddRange(Person.ListViewHeaders());  


Solution:6

Create a listview item

ListViewItem item1 = new ListViewItem("sdasdasdasd", 0)  item1.SubItems.Add("asdasdasd")  


Solution:7

ListViewItem item = new ListViewItem();  item.Text = "fdfdfd";  item.SubItems.Add ("melp");  listView.Items.Add(item);  


Solution:8

add:

.SubItems.Add("asdasdasd");  

to the last line of your code so it will look like this in the end.

listView1.Items.Add("sdasdasdasd").SubItems.Add("asdasdasd");  


Solution:9

Great !! It has helped me a lot. I used to do the same using VB6 but now it is completely different. we should add this

listView1.View = System.Windows.Forms.View.Details;  listView1.GridLines = true;   listView1.FullRowSelect = true;  


Solution:10

Generally:

ListViewItem item = new ListViewItem("Column1Text")     { Tag = optionalRefToSourceObject };    item.SubItems.Add("Column2Text");  item.SubItems.Add("Column3Text");  myListView.Items.Add(item);  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »