实例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#region 自定义变量
int currentCol = -1;
bool sort;
#endregion//列头点击事件
private void lvw_ColumnClick( object sender, ColumnClickEventArgs e)
{
string Asc = (( char )0x25bc).ToString().PadLeft(4, ' ' );
string Des = (( char )0x25b2).ToString().PadLeft(4, ' ' );
if (sort == false )
{
sort = true ;
string oldStr = this .lvw.Columns[e.Column].Text.TrimEnd(( char )0x25bc, ( char )0x25b2, ' ' );
this .lvw.Columns[e.Column].Text = oldStr + Des;
}
else if (sort == true )
{
sort = false ;
string oldStr = this .lvw.Columns[e.Column].Text.TrimEnd(( char )0x25bc, ( char )0x25b2, ' ' );
this .lvw.Columns[e.Column].Text = oldStr + Asc;
}
if (lvw.Columns[e.Column].Tag.ToString()== "n" ) //在设计器中把列头的tag设为"n",则表示该列按数字比较器处理,否则为文本
lvw.ListViewItemSorter = new ListViewItemComparerNum(e.Column, sort);
else
lvw.ListViewItemSorter = new ListViewItemComparer(e.Column, sort);
this .lvw.Sort();
int rowCount = this .lvw.Items.Count;
if (currentCol != -1)
{
if (e.Column != currentCol)
this .lvw.Columns[currentCol].Text = this .lvw.Columns[currentCol].Text.TrimEnd(( char )0x25bc, ( char )0x25b2, ' ' );
}
currentCol = e.Column;
} //文本比较器public class ListViewItemComparer : IComparer
{
public bool sort_b;
public SortOrder order = SortOrder.Ascending;
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer( int column, bool sort)
{
col = column;
sort_b = sort;
}
public int Compare( object x, object y)
{
if (sort_b)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
else
{
return String.Compare(((ListViewItem)y).SubItems[col].Text, ((ListViewItem)x).SubItems[col].Text);
}
}
} //数字比较器
public class ListViewItemComparerNum : IComparer
{
public bool sort_b;
public SortOrder order = SortOrder.Ascending;
private int col;
public ListViewItemComparerNum()
{
col = 0;
}
public ListViewItemComparerNum( int column, bool sort)
{
col = column;
sort_b = sort;
}
public int Compare( object x, object y)
{
decimal d1=Convert.ToDecimal(((ListViewItem)x).SubItems[col].Text);
decimal d2=Convert.ToDecimal(((ListViewItem)y).SubItems[col].Text);
if (sort_b)
{
return decimal .Compare(d1,d2);
}
else
{
return decimal .Compare(d2,d1);
}
}
}
|
以上这篇C# listview 点击列头排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。