繁体   English   中英

添加到listview的整数以进行排序

[英]Add ints to listview for sorting

我有一个listview,我正在尝试根据列进行排序。 我有columnclick事件等工作,它排序,但我有以下问题:

我似乎无法将项目作为整数添加到列表视图中。 这是一个问题,好像我有一列int我必须使用ToString() ,sort将10放在2之前。

有谁知道如何将项目添加为int,以便排序具有所需的功能。 此外,并非所有列都是int,有一些字符串列,我也希望排序也可以处理它们。

作为参考,我使用以下教程作为排序代码: http//support.microsoft.com/kb/319401

干杯

您可以创建一个实现IComparer的分类器类,并将其分配给ListView的ListViewItemSorter属性。

IComparer有一个方法比较。 两个ListViewItem实例传递给该方法。 您需要读取列值,然后将其解析为int并返回正确的比较结果(基于int而不是基于字符串)。

您可以创建自己的ListViewItem类,该类为列创建字符串值,但也保留原始int值以避免比较器中的int.Parse调用。

未经测试的例子:

public class MyItemComparer : IComparer
{
    public int Compare(object x, object y)
    {
        ListViewItem xItem = (ListViewItem)x;
        ListViewItem yItem = (ListViewItem)y;

        int a = int.Parse(xItem.SubItems[0]);
        int b = int.Parse(yItem.SubItems[0]);
        return a.CompareTo(b);
    }
}

您可以检测所选列是否包含数字。 在比较功能中写下这个

            int intX = 0, intY = 0;
            if(int.TryParse(listviewX.SubItems[ColumnToSort].Text, out intX)
                && int.TryParse(listviewY.SubItems[ColumnToSort].Text, out intY))
            {
                return intX.CompareTo(inty);
            }

如果某些列包含数字和文本,可能会出现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM