饼丝怎么炒好吃
C#:ListView点击表头对数据排序
今天写.Net⼤作业时,有⼀个功能是点击ListView的每列的表头时,对整个表的信息按该列进⾏升序或降序排序。我的这个表的数据⽐较特殊,⾥⾯有string,int,float三种数据类型,⽽C#的ListView默认的⽐较⽅法只能把数据当做string来处理,这样的话当对int型数据排序时10就会在2前⾯,对float型数据排序时100.99就会在98.99前⾯。我在⽹上找了⼀些代码,做了⼀些修改,现在可以完美地处理这三种数据。
原始数据图⽚:
当点击RefMarque列时,如果按默认的string类型来排序,结果如下:
可以发现10排在了2前⾯,因为它是先⽐较第⼀位,按ASCII码排序,1就在2前⾯。
对ListView排序算法进⾏了修改和完善。代码如下:
private void listView1_ColumnClick(object nder, ColumnClickEventArgs e){
小数乘法练习题
if (e.Column != sortColumn){
// Set the sort column to the new column.
平静英语sortColumn = e.Column;
/
/ Set the sort order to ascending by default.
listView1.Sorting = SortOrder.Ascending;
}el{
// Determine what the last sort order was and change it.
if (listView1.Sorting == SortOrder.Ascending){全部造句
listView1.Sorting = SortOrder.Descending;
}el{
listView1.Sorting = SortOrder.Ascending;
}
}
// Call the sort method to manually sort.
团圆饭
listView1.Sort();
// Set the ListViewItemSorter property to a new ListViewItemComparer
// object.
this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column, listView1.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;
}
public int Compare(object x, object y)
{
int returnVal = -1;
float a = 0, b = 0;
if (float.TryPar(((ListViewItem)x).SubItems[col].Text, out a) && float.TryPar(((ListViewItem)y).SubItems[col].Text, out b)) {
returnVal = a >= b ? (a == b ? 0 : 1) : -1;
if (order == SortOrder.Descending) {
returnVal *= -1;
}
}
el{
returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
// Determine whether the sort order is descending.
if (order == SortOrder.Descending){
// Invert the value returned by String.Compare.
returnVal *= -1;
}
}
return returnVal;
}
}
因病休学申请书
如果要处理的数据⾥没有float类型,上⾯类⾥的a,b可以定义成int型,下⾯的float.TryPar换成int.TryPar