ListView点击列头,排序结果错误。
--------------------编程问答-------------------- 问题出在比较器里面: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#