ListView 中带有数字的字符串排序问题?
本帖最后由 carrot1983 于 2015-9-16 01:52 编辑http://bbs.csdn.net/topics/310046331
上面有,但是不知道为什么用不起来。请指点一二。
https://msdn.microsoft.com/zh-cn/library/system.windows.forms.listview.listviewitemsorter.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.Text) && ValidateNum(((ListViewItem)y).SubItems.Text))
{
returnVal = decimal.Compare(Convert.ToDecimal(((ListViewItem)x).SubItems.Text),
Convert.ToDecimal(((ListViewItem)y).SubItems.Text));
if (order == SortOrder.Descending)
returnVal *= -1;
return returnVal;
}
else
{
returnVal = String.Compare(((ListViewItem)x).SubItems.Text, ((ListViewItem)y).SubItems.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+|[+-]?(+)?(\.\d+)?)$"))
return true;
else
return false;
}
return true;
}
#endregion
页:
[1]