实例如下:
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 点击列头排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。