将1列的ListView项排序为整数

本文关键字:排序 整数 ListView 1列 | 更新日期: 2023-09-27 17:51:07

我想排序一个列在我的ListView作为一个整数,因为如果我想排序他们我得到的结果。

如果我试着对它们排序,我就会得到这个。我认为原因是,它们作为字符串进行比较?

1101112220.213

我希望它们像这样排序:

123.45101120

等等…

这是我的类来比较项目:

public class ItemComparer : IComparer
{
    public int Column { get; set; }
    public SortOrder Order { get; set; }
    public ItemComparer(int colIndex)
    {
        Column = colIndex;
        Order = SortOrder.None;
    }
    public int Compare(object a, object b)
    {
        int result;
        ListViewItem itemA = a as ListViewItem;
        ListViewItem itemB = b as ListViewItem;
        result = String.Compare(itemA.SubItems[Column].Text, itemB.SubItems[Column].Text);
        if (Order == SortOrder.Descending)
        {
            result *= -1;
        }
        else
        {
            return -1;
        }
        return result;
    }
}
在形式:

ItemComparer sorter = listView_Data.ListViewItemSorter as ItemComparer;
if(sorter == null)
{
    sorter = new ItemComparer(e.Column);
    sorter.Order = SortOrder.Ascending;
    listView_Data.ListViewItemSorter = sorter;
}
if(e.Column == sorter.Column)
{
    if(sorter.Order == SortOrder.Ascending)
    {
        sorter.Order = SortOrder.Descending;
    }
    else
    {
        sorter.Order = SortOrder.Ascending;
    }
}
else
{
    sorter.Column = e.Column;
    sorter.Order = SortOrder.Ascending;
}
listView_Data.Sort();

我如何添加列1,其中从数据库的id是一个整数排序,使他们像上面排序?

将1列的ListView项排序为整数

result = String.Compare(itemA.SubItems[Column].Text, itemB.SubItems[Column].Text);

如果这些值确实是整数,为什么不直接使用它们呢?

result = Int32.Parse(itemA.SubItems[Column].Text) - Int32.Parse(itemB.SubItems[Column].Text);

您可能需要一些额外的逻辑来检查列,这样您就不会试图从包含单词的列中解析整数。