您的位置:首页 > 其它

ListView 表头排序 防闪

2011-11-17 12:32 176 查看


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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: