gpt4 book ai didi

c# - ListView 按列排序

转载 作者:行者123 更新时间:2023-11-30 14:51:54 25 4
gpt4 key购买 nike

我有一个关于 ListView 使用 C# Windows Form 按列排序的作业,但我从 MSDN 获得的代码不起作用。任何人都可以找出代码有什么问题吗?每次我单击 ListView 列时都没有任何反应。

这是代码,我还添加了将在我的 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;
}


}

注意:我在设计表单中添加了列。

这是我的作业的样子:

enter image description here

最佳答案

您的 ListView 中没有任何列。它们只是元素。这就是事件 listView1_ColumnClick 永远不会触发的原因。 (还要确保您已将此事件添加到 ListView 中。)

将此添加到您的 Form1_Load 事件中以初始化列。

// set view mode to see columns
listView1.View = View.Details;

// 100 is just a length of column. HorizontalAlignment.Left starts from left side
listView1.Columns.Add("Name", 100, HorizontalAlignment.Left);
listView1.Columns.Add("Number", 100, HorizontalAlignment.Left);
listView1.Columns.Add("Date", 100, HorizontalAlignment.Left);

现在您会看到可以选择它们的列,以按该列对项目进行排序。

请注意,我刚刚添加了 3 列。因此 ListView 将按顺序在列下显示每个项目及其 2 个子项目。

根据您的要求发布 gif。在这里:)

enter image description here

关于c# - ListView 按列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com