У меня есть задание о ListView
сортировать по столбцу, используя C#. Форма Windows и коды, которые я получил от MSDN, не работают. Кто-нибудь может узнать, что не так с кодами? Каждый раз, когда я нажимаю на столбце ListView
, ничего не происходит.Listview Sort by Column
Вот код, я также добавил элементы, которые будут показывать в моем ListView
private int sortColumn = -1;
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
// Determine whether the column is the same as the last column clicked.
if (e.Column != sortColumn)
{
// Set the sort column to the new column.
sortColumn = e.Column;
// Set the sort order to ascending by default.
listView1.Sorting = SortOrder.Ascending;
}
else
{
// Determine what the last sort order was and change it.
if (listView1.Sorting == SortOrder.Ascending)
listView1.Sorting = SortOrder.Descending;
else
listView1.Sorting = SortOrder.Ascending;
}
// Call the sort method to manually sort.
listView1.Sort();
// Set the ListViewItemSorter property to a new ListViewItemComparer
// object.
this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column,
listView1.Sorting);
}
private void FillItems()
{
// Add items
ListViewItem item1 = new ListViewItem("Nipun Tomar");
item1.SubItems.Add("1");
item1.SubItems.Add("10/11/2000");
ListViewItem item2 = new ListViewItem("First Last");
item2.SubItems.Add("2");
item2.SubItems.Add("12/12/2010");
ListViewItem item3 = new ListViewItem("User User");
item3.SubItems.Add("3");
item3.SubItems.Add("12/01/1800");
ListViewItem item4 = new ListViewItem("Sample");
item4.SubItems.Add("4");
item4.SubItems.Add("05/30/1900");
// Add the items to the ListView.
listView1.Items.AddRange(
new ListViewItem[] {item1, item2, item3, item4});
}
private void Form1_Load(object sender, EventArgs e)
{
FillItems();
}
public class ListViewItemComparer : IComparer
{
private int col;
private SortOrder order;
public ListViewItemComparer()
{
col = 0;
order = SortOrder.Ascending;
}
public ListViewItemComparer(int column, SortOrder order)
{
col = column;
this.order = order;
}
public int Compare(object x, object y)
{
int returnVal= -1;
returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
// Determine whether the sort order is descending.
if (order == SortOrder.Descending)
// Invert the value returned by String.Compare.
returnVal *= -1;
return returnVal;
}
}
Примечание: Я добавил столбцов в виде конструкции.
Вот что мое назначение выглядит следующим образом:
Я отредактировал мой вопрос. Извините, но это не сработало. – Emman
@ Emman вам нужно выбрать столбцы, а не элементы. это событие будет срабатывать только тогда, когда вы, например, нажмете «Имя», то он будет заказывать по имени. нажмите «Дата», затем он будет заказывать по дате. вы хотите, чтобы что-то произошло, когда вы нажимаете на элементы? (отредактируйте: но в изображении я вижу их упорядоченными по 'Int'. Кажется, он работает для вас) –
он не упорядочен по' int', в моем коде 'FillItems' I так и поступал. Также я не понимаю, что вы говорите о столбцах, потому что, как вы видите, есть событие ColumnCLick, которое, когда я нажимаю на столбец, будет сортировать восходящий или нисходящий. Но моя проблема в том, что я не вижу, где у меня ошибка. – Emman