有2个列表框可以交换项目。每个列表项都有文本和值属性 例如:“分支”,1; “叶子”,23,...等 将listbox2中的项添加到listbox1之后,我想对listbox1进行排序。
lb1和lb2是列表框。
protected void btnRemove_Click()
{
if(lb2.Items.count > 0)
{
if(lb2.selectedindex >=0)
{
ListItem li = lb2.selecteditem;
lb1.items.add(li);
//sort
List<ListItem> al = new List<ListItem>();
foreach(listitem l in lb1.items)
{
al.Add(l);
}
lb1.items.clear();
al.sort();
lb1.Datasource=al;
lb1.databind();
}
}
}
在al.sort();
它出错 - “无法比较数组中的2个元素”。
我该怎么纠正这个。
答案 0 :(得分:1)
现有代码的问题在于,您要在ListItem
中添加ArrayList
并对ArrayList
应包含IComparer
的对象进行排序,如{{3}中所述}}
您可以添加自定义IComparer
这样的内容,
public class MyListItemComparer : IComparer
{
int IComparer.Compare(Object x, Object y)
{
//ListItem item1 = (ListItem)x;
//ListItem item2 = (ListItem)y;
return 1;//Your logic to compare and sort;
}
}
然后您可以将sort
方法称为
ArrayList al = new ArrayList();
..... //Your other code
IComparer myComparer = new MyListItemComparer();
al.Sort(myComparer);
答案 1 :(得分:1)
本文应该对您有所帮助:C# ArrayList Examples。
另外,请查看documentation for ArrayList。
答案 2 :(得分:1)
尝试此操作来排序您的al
数组:
al.OrderBy(a => a);
答案 3 :(得分:0)
请确保您的数组列表包含正确的数据且不为空。
al.sort();
应该对整数,字符串和其他数据类型的arraylist工作,如果它们继承IComparable
,则需要编写自己的比较器。