ListView在Detail形式的时候,如何才能使其按不同的列排序!
记得以前用VB时,有SortKey 属性,但是现在没有了!
如何实现??
你先要实现一个IComparer接口,然后给listview的ListViewItemSorter属性附值
感谢您使用微软产品。
在.NET Framework中,您可以通过创建一个类来实现System.Collections.IComparer接口,来实现ListView控件的排序功能。具体实现是:创建该类的实例,赋予给ListView1控件对象的ListViewItemSorter属性,然后在ListView的ColumnClick事件句柄中添加代码实现按点击列排序。
下面提供一段示例代码功能参考,请根据您的系统的实际情况进行相应的修改:
private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
ColumnSort columnsort = new ColumnSort(e.Column);
columnsort.bAscending = (listView1.Sorting == SortOrder.Ascending);
if (columnsort.bAscending)
{
listView1.Sorting = SortOrder.Descending;
}
else
{
listView1.Sorting = SortOrder.Ascending;
}
listView1.ListViewItemSorter=columnsort;
}
public class ColumnSort:IComparer
{
private int columnNum = 0;
public bool bAscending = true;
public ColumnSort(int column_to_sort)
{
columnNum=column_to_sort;
}
public int Compare(object a, object b)
{
System.Windows.Forms.ListViewItem
listItemA=(System.Windows.Forms.ListViewItem)a;
System.Windows.Forms.ListViewItem
listItemB=(System.Windows.Forms.ListViewItem)b;
if (bAscending)
{
return String.Compare(listItemA.SubItems[columnNum].ToString(),listItemB.SubItems[columnNum].ToString());
}
else
{
return -1 * String.Compare(listItemA.SubItems[columnNum].ToString(),listItemB.SubItems[columnNum].ToString());
}
}
}
关于ListView控件类的更详细信息,请参考如下MSDN:
ms-help://MS.VSCC/MS.MSDNVS/cpref/html/frlrfSystemWindowsFormsListViewMembersic.htm
— 微软全球技术中心 VB支持中心
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。