c#Listview点击表头之后排序问题。
C#listview点击标头之后做升序或者降序处理,以下是代码:这段代码可以做升序和降序处理,但是个别的列不能降序,希望有这方面经验的高手帮忙指导一下。...
C#listview点击标头之后做升序或者降序处理,以下是代码:
这段代码可以做升序和降序处理,但是个别的列不能降序,希望有这方面经验的高手帮忙指导一下。 展开
这段代码可以做升序和降序处理,但是个别的列不能降序,希望有这方面经验的高手帮忙指导一下。 展开
2个回答
展开全部
其实一楼说的意思是首先你要把你算表达的数据写成一个类,有类属性。然后用List<T>来进行排序。
其实可以这样做。你既然会用IComparer这个接口,你用这个接口对类进行排序,当点击列表表头是,利用p.GetType().GetProperties()反射类属性传参对LIST进行排序,然后复制给LISTVIEW。
这个我用list实现过只是单一的属性排序,你涉及多属性,则可以利用反射类,或者利用全局变量来传参。
public static clnum = -1;
单击是 clnum = 单击的列数
class a:IComparer
{
private string aa;
private string bb;
public string AA{get;set}
public string BB{get;set}
public int compare(a x,a y)
{
if(clnum == 0)
{
return x.AA.compare(y.AA)
}else if(clum==1)
{
return x.BB.compare(y.BB)}
}
else{return 0;}
}
把值付给list<a>
list<a> a1 = new list<a>;
al.sort();
然后把a1复制给listview控件
没有编译器单词有可能打错了,这是一种方法思路。果断可以实现。
其实可以这样做。你既然会用IComparer这个接口,你用这个接口对类进行排序,当点击列表表头是,利用p.GetType().GetProperties()反射类属性传参对LIST进行排序,然后复制给LISTVIEW。
这个我用list实现过只是单一的属性排序,你涉及多属性,则可以利用反射类,或者利用全局变量来传参。
public static clnum = -1;
单击是 clnum = 单击的列数
class a:IComparer
{
private string aa;
private string bb;
public string AA{get;set}
public string BB{get;set}
public int compare(a x,a y)
{
if(clnum == 0)
{
return x.AA.compare(y.AA)
}else if(clum==1)
{
return x.BB.compare(y.BB)}
}
else{return 0;}
}
把值付给list<a>
list<a> a1 = new list<a>;
al.sort();
然后把a1复制给listview控件
没有编译器单词有可能打错了,这是一种方法思路。果断可以实现。
展开全部
你有没有试过不要排列控件,而是排列控件中的数据,打个比方,你的数据是
class Person
{
public string Name {get;set;}
public string Age {get;set;}
}
public void method()
{
List<Person> persons = new List<Person>();//这是你的数据源
persons = persons.OrderBy(p => p.Name).ToList();//按Name排序升序
persons = persons.OrderByDescending(p => p.Name).ToList();//按Name排序降序
}
更多追问追答
追问
你好,感谢你的回答。你这个是按固定的某一列进行排序的,我要的效果是随便点一列就可以排序的。
追答
也可以的啊你改一改代码
class Person
{
public string Name { get; set; }
public string Age { get; set; }
}
public List<Person> method(Func<Person,string> columnName)//这里用一个委托来做参数就好了,当然这个委托是一个方法,你只要根据你的数据来定义这个委托就好了,也可是是lamda表达式
{
List<Person> persons = new List<Person>();//这是你的数据源
persons = persons.OrderBy(columnName).ToList();
return persons;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询