close

 當您使用資源瀏覽器查看文件時,您可以隨心所欲的按名稱、大小、類型及修改日期不同的列對文件進行大小排序。.Net提供的ListView組件沒有直接提供這種功能,但要實現並不難。
    ListView.Sort()方法的功能是「對列表視圖的項進行排序」,可當您調用它時卻什麼也沒有發生,原因是您沒有為listView1.ListViewItemSorter指定排序器。所以,首先必須寫一個排序類。
public class mySorter:IComparer
{
private Comparer comparer;
private int sortColumn;
private SortOrder sortOrder;
public mySorter()
{
sortColumn=0;
sortOrder=SortOrder.None;
comparer=Comparer.Default;
}
//指定進行排序的列
public int SortColumn
{
get {return sortColumn;}
set {sortColumn=value;}
}
//指定按升序或降序進行排序
public SortOrder SortOrder
{
get {return sortOrder;}
set {sortOrder=value;}
}
public int Compare(object x,object y)
{
int CompareResult;
ListViewItem itemX=(ListViewItem)x;
ListViewItem itemY=(ListViewItem)y;
//在這裡您可以提供自定義的排序
CompareResult=comparer.Compare(itemX.SubItems[this.sortColumn].Text,itemY.SubItems[this.sortColumn].Text);
if (this.SortOrder==SortOrder.Ascending)
return CompareResult;
else
if (this.SortOrder==SortOrder.Descending)
return (-CompareResult);
else
return 0;
}
}
  

    如何使用這個類,很簡單。新建一個Windows應用程序,加入ListView組件listView1並將其View屬性設為Details。

//加入排序類
private mySorter sorter;
//修改窗體構造函數
public Form1()
{
InitializeComponent();
sorter=new myColumnSorter();
//為ListViewItemSorter指定排序類
this.listView1.ListViewItemSorter=sorter;
sorter.SortOrder=SortOrder.Ascending;
}
//給單擊表頭事件添加代碼
private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if (e.Column==this.sorter.SortColumn)
{
if (this.sorter.SortOrder==SortOrder.Ascending)
this.sorter.SortOrder=SortOrder.Descending;
else
if (this.sorter.SortOrder==SortOrder.Descending)
this.sorter.SortOrder=SortOrder.Ascending;
else
return;
}
else
{
this.sorter.SortColumn=e.Column;
}
this.listView1.Sort();
}
   怎麼樣,效果不錯吧,如果您需要自定義排序,那麼您可以修改排序器的Compare()方法。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 11 的頭像
    11

    冠霖的部落格

    11 發表在 痞客邦 留言(0) 人氣()