【发布时间】:2012-01-07 15:35:02
【问题描述】:
如何在 WinForms .NET 2.0 中按特定列号对列表视图控件进行排序?例如我有一个名为“行号”的列,其索引为 1,我想按升序对列表视图框中的项目进行排序。
【问题讨论】:
-
查看微软的这个实现:support.microsoft.com/en-us/kb/319401
标签: c# winforms sorting indexing
如何在 WinForms .NET 2.0 中按特定列号对列表视图控件进行排序?例如我有一个名为“行号”的列,其索引为 1,我想按升序对列表视图框中的项目进行排序。
【问题讨论】:
标签: c# winforms sorting indexing
我在很多 Winform 项目中都使用过这个列排序器:
private void listView1_ColumnClick(object sender,
System.Windows.Forms.ColumnClickEventArgs e)
{
ListView myListView = (ListView)sender;
// Determine if clicked column is already the column that is being sorted.
if ( e.Column == lvwColumnSorter.SortColumn )
{
// Reverse the current sort direction for this column.
if (lvwColumnSorter.Order == SortOrder.Ascending)
{
lvwColumnSorter.Order = SortOrder.Descending;
}
else
{
lvwColumnSorter.Order = SortOrder.Ascending;
}
}
else
{
// Set the column number that is to be sorted; default to ascending.
lvwColumnSorter.SortColumn = e.Column;
lvwColumnSorter.Order = SortOrder.Ascending;
}
// Perform the sort with these new sort options.
myListView.Sort();
}
来源:Click Here
【讨论】:
MSDN 上有示例ListView.ColumnClick article:非常简短。本质上,您编写一个ListViewItemComparer 并在每次单击列时使用它:
class ListViewItemComparer : IComparer
{
private int col = 0;
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
}
class MyForm : Form
{
// private System.Windows.Forms.ListView listView1;
// ColumnClick event handler.
private void ColumnClick(object o, ColumnClickEventArgs e)
{
this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column);
}
}
【讨论】: