- 积分
- 7540
- 明经币
- 个
- 注册时间
- 2006-4-6
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 carrot1983 于 2015-9-16 01:52 编辑
http://bbs.csdn.net/topics/310046331
上面有,但是不知道为什么用不起来。请指点一二。
https://msdn.microsoft.com/zh-cn ... viewitemsorter.aspx
因为是按字符串排序,遇到数字时就变成,1,100,110,112的排序了。
#region ListView排序类
/// <summary>
/// ListView排序类
/// </summary>
public class ListViewItemComparer : System.Collections.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;
int col = 0;
if (ValidateNum(((ListViewItem)x).SubItems[col].Text) && ValidateNum(((ListViewItem)y).SubItems[col].Text))
{
returnVal = decimal.Compare(Convert.ToDecimal(((ListViewItem)x).SubItems[col].Text),
Convert.ToDecimal(((ListViewItem)y).SubItems[col].Text));
if (order == SortOrder.Descending)
returnVal *= -1;
return returnVal;
}
else
{
returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
if (order == SortOrder.Descending)
returnVal *= -1;
return returnVal;
}
}
}
public static bool ValidateNum(string InputStr)
{
if (InputStr != "")
{
if (Regex.IsMatch(InputStr.Trim(' '), @"^(0|[+-]?0\.\d+|[+-]?[1-9]([0-9]+)?(\.\d+)?)$"))
return true;
else
return false;
}
return true;
}
#endregion
|
|