Можно ли создать целочисленный столбец (или DataTime и т. д.) В ListView? Это очень важно, потому что хотелось бы правильно отсортировать список по этому столбцу.
Единственный способ добавить подэлементы в ListViewItem, который я нашел:
listviewitem.SubItems.Add("1");
Я бы хотел избежать синтаксического анализа этих строк, чтобы получить представление int для каждого вида!





Вместо этого вы просто добавляете строки в список и получаете их с помощью свойства .Text.
Пример:
int a = 0;
listView1.Items.Add(a.ToString());
или же
int a = Convert.ToInt32(listView1.Items[0].SubItems[0].Text);
Вы можете сделать то же самое с DataTime и другими типами данных, просто преобразовав их в тип String.
Как вы интерпретируете столбец, содержащий даты, это полностью зависит от вас.
Просто реализуйте свой алгоритм сортировки конкретного столбца ListView.
Вы можете использовать свойство 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;
}
Я думаю, что у нас есть столбец целочисленного типа, такой как у нас есть столбцы в datagrid, на самом деле я не имею представления об элементе управления списком. Дай мне знать, если найдешь ответ.
ListView отличается от представления сетки данных в этом отношении, у вас могут быть только строки. Поэтому вам нужно использовать свойство tag (я только что принял правильный ответ)
Перейдите по этой ссылке:
Как отсортировать элемент управления 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;
}
//(...)
}
Насколько мне известно, конкретный столбец ListView не поддерживает другие типы данных, которые вы можете сортировать, чем по какой-то уже реализованной функции. Вы просто делаете это сами, реализуя определенный программный алгоритм для определенного столбца ...