当前位置:编程学习 > C#/ASP.NET >>

ListView点击列头,排序结果错误。

--------------------编程问答-------------------- 问题出在比较器里面:compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
这个方法比较的是Text,如果要比较数字,需要将Text转化为double。 --------------------编程问答--------------------
引用 1 楼 guwei4037 的回复:
问题出在比较器里面:compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
这个方法比较的是Text,如果要比较数字,需要将Text转化为double。


按照你说的,我新增了转换成double的比较方法,同时保留ObjectCompare为默认比较。但是置默认的排序方式就不起作用了。
 listView1.Sorting = SortOrder.None;
 listView1.Sorting = SortOrder.Ascending;
 listView1.Sorting = SortOrder.Descending;
代码如下:
 
 public int Compare(object x, object y)
        {
            int compareResult = 0;
            ListViewItem listviewX, listviewY;
            listviewX = (ListViewItem)x;
            listviewY = (ListViewItem)y;

            string xValue = listviewX.SubItems[ColumnToSort].Text;
            string yValue = listviewY.SubItems[ColumnToSort].Text;

            double xNumber, yNumber;
            bool xparsed = double.TryParse(xValue, out xNumber);
            bool yparsed = double.TryParse(yValue, out yNumber);

            if (xparsed && yparsed)
            {
                compareResult = xNumber >= yNumber ? (xNumber == yNumber ? 0 : 1) : -1;
            }
            else
            {
                compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
            }
            if (OrderOfSort == SortOrder.Ascending)
            {
                return compareResult;
            }
            else if (OrderOfSort == SortOrder.Descending)
            { 
                return (-compareResult);
            }
            else
            {
                return 0;
            }
        }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,