HuronControl.ListView()
功能:单击表头可按照所在列排序,对于已排序列,则反向排序;双缓冲,在动态添加列表项时防止闪烁。
该控件继承自System.Windows.Forms.ListView
构造方法
public ListView()
{
this.ColumnClick += new ColumnClickEventHandler(this.ColumnClick_Sort);
SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
}
排序方法
//声明全局变量
private int sortColumn = -1;
//事件代码
private void ColumnClick_Sort(object sender, ColumnClickEventArgs e)
{
if (this.SelectedItems.Count != 0)
this.SelectedItems.Clear();
if (e.Column != sortColumn)
{
//将当前操作列作为排序列
sortColumn = e.Column;
//将升序作为默认排序方式
Sorting = SortOrder.Ascending;
}
else
{
//变更上次的排序方式
if (Sorting == SortOrder.Ascending)
Sorting = SortOrder.Descending;
else
Sorting = SortOrder.Ascending;
}
//手动执行排序方法
Sort();
//设置 ListViewItemSorter 为 ListViewItemComparer 的实例
this.ListViewItemSorter = new ListViewItemComparer(e.Column, Sorting);
}
比较类
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);
//确定排序方式是否为降序
if (order == SortOrder.Descending)
returnVal *= -1;
return returnVal;
}
}