Создайте столбец int в ListView (Winforms) - PullRequest
2 голосов
/ 18 ноября 2008

Можно ли создать целочисленный (или DataTime и т. Д.) Столбец в ListView? Это очень важно, потому что я хотел бы правильно отсортировать список по этому столбцу.

Единственный способ добавить подэлементы в ListViewItem, который я нашел:

listviewitem.SubItems.Add("1");

Я бы хотел избежать разбора этих строк, чтобы получить представление int для каждого вида!

Ответы [ 4 ]

4 голосов
/ 18 ноября 2008

Вы можете использовать свойство Tag. Эти маленькие вспомогательные функции позаботятся об этом:

private void setListItem(int row, int column, int value) {
  ListViewItem.ListViewSubItem item = listView1.Items[row].SubItems[column];
  item.Tag = value;
  item.Text = value.ToString();
}
private int getListItem(int row, int column) {
  return (int)listView1.Items[row].SubItems[column].Tag;
}
1 голос
/ 18 ноября 2008

Вместо этого вы просто добавляете строки в список и получаете строки, используя свойство .Text.

Пример:

int a = 0;
listView1.Items.Add(a.ToString());

или

int a = Convert.ToInt32(listView1.Items[0].SubItems[0].Text);

Вы можете сделать то же самое с DataTime и другими типами данных, просто преобразовав их в тип String.

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

0 голосов
/ 19 ноября 2016

Перейдите по этой ссылке:
Как отсортировать элемент управления ListView по столбцу в Visual C #

Тогда для функции Compare:
(добавьте следующий регистр переключения согласно вашему требованию типа данных относительно типа данных столбца)

public int Compare(object x, object y)
{
    //(...)
    switch (ColumnToSort)
    {
        case 2:
            compareResult = objectComparer.Compare(DateTime.Parse(listviewX.SubItems[ColumnToSort].Text), DateTime.Parse(listviewY.SubItems[ColumnToSort].Text));
            break;
        case 3:
            compareResult = objectComparer.Compare(float.Parse(listviewX.SubItems[ColumnToSort].Text.Replace("kb", "").Replace("mb", "")), float.Parse(listviewY.SubItems[ColumnToSort].Text.Replace("kb", "").Replace("mb", "")));
            break;

        default:
            compareResult = objectComparer.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
            break;
    }
    //(...)
}              
0 голосов
/ 07 марта 2009

Я думаю, что у нас есть столбец типа integer, такой же, как столбцы в сетке данных, на самом деле я не имею представления об управлении списком. Дайте мне знать, если найдете ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...