C#:如何在ListView中添加子项

创建项目(在键下)很简单,但如何添加子项(值)?

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

像这样:

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

您将子项目打包到一个数组中,并将该数组添加为列表项。

向数组添加值的顺序决定了它们出现的列,因此请将子项标题视为[0],[1],[2]等。

这是一个代码示例:

 //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); } 

假设您有一个List Collection,其中包含要在ListView中显示的许多项,请使用以下示例迭代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); } 

该代码在ListView中生成以下输出(当然取决于List Collection中有多少项):

基本上第一列是包含许多子项(其他列)的listviewitem。 它可能看起来很奇怪,但listview非常灵活,你甚至可以用它构建一个类似Windows的文件浏览器!

我已经使用ListViewItemsCollection上的扩展方法对其进行了改进。 在我看来,它使调用代码更简洁,并促进更一般的重用。

 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); } } 

调用AddWithTextAndSubItems如下所示:

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

希望这可以帮助!

我认为这是最快/最好的方法:

对于每个类都有string[] obj.ToListViewItem()方法,然后执行以下操作:

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

这是一个示例定义

 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() }; } } 

作为额外的奖励,您可以使用static方法返回ColumnHeader[]列表以设置listview列

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

创建列表视图项

 ListViewItem item1 = new ListViewItem("sdasdasdasd", 0) item1.SubItems.Add("asdasdasd") 
 ListViewItem item = new ListViewItem(); item.Text = "fdfdfd"; item.SubItems.Add ("melp"); listView.Items.Add(item); 

加:

 .SubItems.Add("asdasdasd"); 

到你的代码的最后一行,所以它最终会看起来像这样。

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

太棒了!! 它帮助了我很多。 我曾经使用VB6做同样的事情,但现在它完全不同了。 我们应该加上这个

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

通常:

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