carrot1983 发表于 2015-9-16 01:50:22

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]
查看完整版本: ListView 中带有数字的字符串排序问题?