[英]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.