将1列的ListView项排序为整数?

时间:2014-03-19 17:18:09

标签: c# listview sorting visual-studio-2012

我想将ListView中的一列排序为整数,因为如果我想对它们进行排序,我会得到结果。

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

1 10 11 12 2 20 21 3

我希望他们像这样排序:

1 2 3 4 五 10 11 20

依旧......

这是我的班级比较项目:

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 个答案:

答案 0 :(得分:2)

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

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

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

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