C #: Как добавить подпункты в ListView - PullRequest
25 голосов
/ 08 апреля 2009

Создать элемент (под ключом) легко, но как добавить подпункты (значение)?

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

Ответы [ 10 ]

28 голосов
/ 08 апреля 2009

Вы помещаете подэлементы в массив и добавляете массив как элемент списка.

Порядок, в котором вы добавляете значения в массив, определяет столбец, в котором они отображаются, поэтому ваши заголовки подпункта следует рассматривать как [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);
}
24 голосов
/ 08 апреля 2009

Как это:

ListViewItem lvi = new ListViewItem();
lvi.SubItems.Add("SubItem");
listView1.Items.Add(lvi);
15 голосов
/ 08 апреля 2009

Предположим, у вас есть коллекция списков, содержащая много элементов для отображения в ListView, возьмем следующий пример, который выполняет итерацию по коллекции списков:

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 (конечно, в зависимости от того, сколько элементов у вас в коллекции списков):

По сути, первый столбец представляет собой элемент списка, содержащий множество подэлементов (других столбцов). Это может показаться странным, но listview очень гибкий, с ним можно даже создать Windows-подобный файловый менеджер!

3 голосов
/ 21 мая 2013

Я думаю, что самый быстрый / удобный способ сделать это:

Для каждого класса есть метод 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());
3 голосов
/ 06 января 2012

Я уточнил это, используя метод расширения в 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"); 

Надеюсь, это поможет!

2 голосов
/ 21 мая 2013

В целом:

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

item.SubItems.Add("Column2Text");
item.SubItems.Add("Column3Text");
myListView.Items.Add(item);
2 голосов
/ 21 мая 2013

добавить:

.SubItems.Add("asdasdasd");

до последней строки вашего кода, чтобы в конце он выглядел следующим образом.

listView1.Items.Add("sdasdasdasd").SubItems.Add("asdasdasd");
2 голосов
/ 08 апреля 2009

Создать элемент списка

ListViewItem item1 = new ListViewItem("sdasdasdasd", 0)
item1.SubItems.Add("asdasdasd")
2 голосов
/ 08 апреля 2009
ListViewItem item = new ListViewItem();
item.Text = "fdfdfd";
item.SubItems.Add ("melp");
listView.Items.Add(item);
1 голос
/ 03 ноября 2009

Отлично !! Это мне очень помогло. Раньше я делал то же самое, используя VB6, но теперь это совершенно другое мы должны добавить это

listView1.View = System.Windows.Forms.View.Details;
listView1.GridLines = true; 
listView1.FullRowSelect = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...