27

创建一个项目(在键下)很容易,但是如何添加子项目(值)?

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

10 回答 10

29

您将子项打入一个数组并将该数组添加为列表项。

将值添加到数组的顺序决定了它们出现的列,因此将子项目标题视为 [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);
}
于 2009-04-08T08:48:41.603 回答
24

像这样:

ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add("SubItem");
listView1.Items.Add(lvi);
于 2009-04-08T08:49:04.163 回答
14

假设您有一个 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 集合中有多少项目):

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

于 2009-04-08T09:10:39.273 回答
3

我使用 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"); 

希望这可以帮助!

于 2012-01-06T14:41:56.647 回答
3

我认为最快/最简洁的方法是:

对于每个类都有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[]列表的方法来设置列表视图列

listView1.Columns.AddRange(Person.ListViewHeaders());
于 2013-05-21T19:53:28.813 回答
2
ListViewItem item = new ListViewItem();
item.Text = "fdfdfd";
item.SubItems.Add ("melp");
listView.Items.Add(item);
于 2009-04-08T08:48:32.527 回答
2

创建一个列表视图项

ListViewItem item1 = new ListViewItem("sdasdasdasd", 0)
item1.SubItems.Add("asdasdasd")
于 2009-04-08T08:48:58.873 回答
2

添加:

.SubItems.Add("asdasdasd");

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

listView1.Items.Add("sdasdasdasd").SubItems.Add("asdasdasd");
于 2013-05-21T19:18:51.390 回答
2

一般来说:

ListViewItem item = new ListViewItem("Column1Text")
   { Tag = optionalRefToSourceObject };

item.SubItems.Add("Column2Text");
item.SubItems.Add("Column3Text");
myListView.Items.Add(item);
于 2013-05-21T19:27:16.073 回答
1

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

listView1.View = System.Windows.Forms.View.Details;
listView1.GridLines = true; 
listView1.FullRowSelect = true;
于 2009-11-03T12:09:41.923 回答