Создание столбцов в спискеView и добавление элементов

Я изучаю, как использовать listView в windowsForm, и у меня есть некоторые проблемы, которые я надеюсь решить здесь. Во-первых, когда я создаю столбцы с помощью кода ниже:

private void initListView()
    {
        // Add columns
        lvRegAnimals.Columns.Add("Id", -3,HorizontalAlignment.Left);
        lvRegAnimals.Columns.Add("Name", -3, HorizontalAlignment.Left);
        lvRegAnimals.Columns.Add("Age", -3, HorizontalAlignment.Left);
    }

Когда я запускаю программу, имя столбца не отображается, все они находятся в левом углу, и мне приходится "перетаскивать" их, чтобы читать текст. Что я сделал неправильно?

И, наконец, мне интересно, как добавлять элементы в столбцы. Сначала создаю объект, например

ListViewItem item1 = new ListViewItem(???);
item1.SubItems.Add("text");

Является ли каждый listViewItem объектом столбца или строки? Как добавить строки информации? Предоставьте некоторую помощь! Спасибо!

Ответ 1

Ваша первая проблема заключается в том, что вы передаете -3 во второй параметр Columns.Add. Для его автоматической сортировки столбца должно быть -2. Источник: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx (см. Комментарии к примеру кода внизу)

private void initListView()
{
    // Add columns
    lvRegAnimals.Columns.Add("Id", -2,HorizontalAlignment.Left);
    lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left);
    lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left);
}

Вы также можете использовать другую перегрузку, Добавить (строка). Например:

lvRegAnimals.Columns.Add("Id");
lvRegAnimals.Columns.Add("Name");
lvRegAnimals.Columns.Add("Age");

Ссылка на дополнительные перегрузки: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection.aspx

Во-вторых, чтобы добавить элементы в ListView, вам нужно создать экземпляры ListViewItem и добавить их в коллекцию ListView Items. Вам понадобится использовать конструктор string [].

var item1 = new ListViewItem(new[] {"id123", "Tom", "24"});
var item2 = new ListViewItem(new[] {person.Id, person.Name, person.Age});
lvRegAnimals.Items.Add(item1);
lvRegAnimals.Items.Add(item2);

Вы также можете хранить объекты в свойстве тега элемента.

item2.Tag = person;

И затем вы можете извлечь его

var person = item2.Tag as Person;

Сообщите мне, есть ли у вас какие-либо вопросы, и я надеюсь, что это поможет!

Ответ 2

Я не видел, чтобы кто-то отвечал на это правильно. Поэтому я отправляю его здесь. Чтобы получить столбцы, вам нужно указать следующую строку.

lvRegAnimals.View = View.Details;

И затем добавьте свои столбцы после этого.

lvRegAnimals.Columns.Add("Id", -2, HorizontalAlignment.Left);
lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left);
lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left);

Надеюсь, что это поможет любому, кто ищет этот ответ в будущем.

Ответ 3

Вам нужно установить свойство для элемента управления:

listView1.View = View.Details;

Ответ 4

            listView1.View = View.Details;
        listView1.Columns.Add("Target No.", 83, HorizontalAlignment.Center);
        listView1.Columns.Add("   Range   ", 100, HorizontalAlignment.Center);
        listView1.Columns.Add(" Azimuth ", 100, HorizontalAlignment.Center);     

У меня тоже была проблема. Я перетаскиваю столбец влево.. но теперь нормально.. так что скажем, у меня есть 283 * 196 размер списка. Мы объявили в ширине столбца -2 для автоматической ширины. Для подгонки в списке мы можем разделить ширину списка на 3 части (83,100,100)...