`
helloyesyes
  • 浏览: 1335532 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

ListView的Column排序方法

阅读更多

ListView的Column排序是很常见的功能。具体实现的时候,主要是下面几步:

1、创建两个类

2、重载ColumnClick方法。

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Collections;

namespacetest
...{
publicpartialclassForm1:Form
...{
publicForm1()
...{
InitializeComponent();
}


privatevoidlistView1_ColumnClick(objectsender,ColumnClickEventArgse)
...{
//CreateaninstanceoftheColHeaderclass.
ColHeaderclickedCol=(ColHeader)this.listView1.Columns[e.Column];

//Settheascendingpropertytosortintheoppositeorder.
clickedCol.ascending=!clickedCol.ascending;

//Getthenumberofitemsinthelist.
intnumItems=this.listView1.Items.Count;

//Turnoffdisplaywhiledataisrepoplulated.
this.listView1.BeginUpdate();

//PopulateanArrayListwithaSortWrapperofeachlistitem.
ArrayListSortArray=newArrayList();
for(inti=0;i<numItems;i++)
...{
SortArray.Add(
newSortWrapper(this.listView1.Items[i],e.Column));
}


//SorttheelementsintheArrayListusinganewinstanceoftheSortComparer
//class.Theparametersarethestartingindex,thelengthoftherangetosort,
//andtheIComparerimplementationtouseforcomparingelements.Notethat
//theIComparerimplementation(SortComparer)requiresthesort
//directionforitsconstructor;trueifascending,othwisefalse.
SortArray.Sort(0,SortArray.Count,newSortWrapper.SortComparer(clickedCol.ascending));

//Clearthelist,andrepopulatewiththesorteditems.
this.listView1.Items.Clear();
for(inti=0;i<numItems;i++)
this.listView1.Items.Add(((SortWrapper)SortArray[i]).sortItem);

//Turndisplaybackon.
this.listView1.EndUpdate();

}


privatevoidbutton1_Click(objectsender,EventArgse)
...{
this.listView1.View=View.Details;

//AddcolumnsusingtheColHeaderclass.Thefourth
//parameterspecifiestrueforanascendingsortorder.
listView1.Columns.Add(newColHeader("Name",110,HorizontalAlignment.Left,true));
listView1.Columns.Add(
newColHeader("Region",50,HorizontalAlignment.Left,true));
listView1.Columns.Add(
newColHeader("Sales",70,HorizontalAlignment.Left,true));

//Addthedata.
listView1.Items.Add(newListViewItem(newstring[]...{"Archer,Karen","4","0521.28"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Benson,Max","8","0828.54"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Bezio,Marin","3","0535.22"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Higa,Sidney","2","0987.50"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Martin,Linda","6","1122.12"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Nash,Mike","7","1030.11"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Sanchez,Ken","1","0958.78"}));
listView1.Items.Add(
newListViewItem(newstring[]...{"Smith,Ben","5","0763.25"}));

//ConnecttheListView.ColumnClickeventtotheColumnClickeventhandler.
this.listView1.ColumnClick+=newColumnClickEventHandler(listView1_ColumnClick);


}

}


publicclassColHeader:ColumnHeader
...{
publicboolascending;
publicColHeader(stringtext,intwidth,HorizontalAlignmentalign,boolasc)
...{
this.Text=text;
this.Width=width;
this.TextAlign=align;
this.ascending=asc;
}

}


classSortWrapper
...{
internalListViewItemsortItem;
internalintsortColumn;


//ASortWrapperrequirestheitemandtheindexoftheclickedcolumn.
publicSortWrapper(ListViewItemItem,intiColumn)
...{
sortItem
=Item;
sortColumn
=iColumn;
}


//Textpropertyforgettingthetextofanitem.
publicstringText
...{
get
...{
returnsortItem.SubItems[sortColumn].Text;
}

}


//ImplementationoftheIComparer
//interfaceforsortingArrayListitems.
publicclassSortComparer:IComparer
...{
boolascending;

//Constructorrequiresthesortorder;
//trueifascending,otherwisedescending.
publicSortComparer(boolasc)
...{
this.ascending=asc;
}


//ImplemnentationoftheIComparer:Compare
//methodforcomparingtwoobjects.
publicintCompare(objectx,objecty)
...{
SortWrapperxItem
=(SortWrapper)x;
SortWrapperyItem
=(SortWrapper)y;

stringxText=xItem.sortItem.SubItems[xItem.sortColumn].Text;
stringyText=yItem.sortItem.SubItems[yItem.sortColumn].Text;
returnxText.CompareTo(yText)*(this.ascending?1:-1);
}

}


}

}
分享到:
评论

相关推荐

    wpf列表listview自动排序排列

    在本教程中,我们将深入探讨如何实现`ListView`的自动排序功能,这对于初学者来说是非常实用的技能。 ### `ListView`基础 `ListView`是WPF中的一个视图控件,它可以从数据源中呈现数据。`ListView`通常与`...

    delphi listview双向排序

    综上所述,"delphi listview双向排序"涉及了Delphi中ListView控件的事件处理、自定义排序逻辑以及利用内置的Sort方法。通过理解和应用这些知识点,你可以构建一个用户友好的界面,允许用户根据需要对ListView中的...

    WPF ListView控件添加排序功能

    在实际应用中,我们常常需要为ListView添加排序功能,以便用户可以根据数据的不同属性进行升序或降序排列。本篇文章将深入探讨如何在WPF的ListView中实现这一功能。 首先,我们要了解ListView的基本结构。ListView...

    WPF ListView排序功能

    当ListView的ItemsSource是ICollectionView时,可以通过调用其SortDescriptions和Filter方法来实现排序和过滤。 - **SortDescriptions对象**:ICollectionView的SortDescriptions属性是一个SortDescription集合,...

    VB.NET ListView排序类

    一个用来排序ListView的类 以下需要在Listview的标题单击事件中加入 Private m_SortingColumn As ColumnHeader Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms....

    Delphi点击ListView表头排序数据..rar

    例如,我们可以创建一个TStringList对象,将ListView的Items转存到其中,然后调用SortByValue方法进行排序。 4. **更新ListView显示**: 排序完成后,我们需要将排序后的数据重新赋值给ListView的Items。同时,...

    在ListView中对数据进行排序

    2. **自定义排序**:对于更复杂的排序需求,如按自定义规则或数值列排序,你需要实现`IComparer`接口并传入到`ListView.Items.Sort`方法中。下面是一个自定义比较器的例子: ```csharp class CustomComparer : ...

    delphi中ListView控件的点击排序样例

    在Delphi编程环境中,ListView控件是一个非常...总之,这个示例展示了如何利用Delphi的ListView控件的OnColumnClick事件及自定义排序方法,实现用户点击列头时的动态排序功能,为用户提供直观且易用的数据查看体验。

    delphi 对listview的编辑,排序

    一种常见的方法是利用TListView的Items集合,将其转换为数组,然后应用标准的数组排序算法,如快速排序或冒泡排序。排序完成后,将排序后的数组重新赋值给TListView的Items属性。 ```delphi procedure TForm1....

    c# listview按数值排序 例子

    C#的ListView控件本身并不直接支持数值排序,但我们可以利用`ListViewItemCollection`类的`Sort`方法配合自定义的比较器(Comparator)来实现。下面是一种实现方式: 1. **创建自定义比较器**: 定义一个自定义的`...

    ListView任意排序

    ColumnSorter类通常包含一个枚举类型来定义排序方式(升序或降序),以及一个比较器方法,用于比较ListViewItem中的数据并根据指定列进行排序。 ```csharp public enum SortOrder { Ascending, Descending } public...

    浅谈WinForm下ListView的扩展(一):单击列头实现排序.doc

    为了提高效率,可以考虑使用更高效的排序算法,或者在数据加载到`ListView`之前对其进行预排序。 ### 结论 通过上述步骤,我们不仅能够实现`ListView`在WinForm应用中按列头点击进行排序的功能,还能够进一步扩展...

    ListView排序

    需要注意的是,这种排序方法适用于字符串数据,对于数值或其他类型的数据,可能需要进行额外的转换处理。此外,对于大量数据,可能需要考虑更高效的排序算法或使用线程异步处理,以提高用户体验。 总之,Delphi的...

    WPF ListView排序

    本文将深入探讨如何实现ListView的排序功能,包括点击元素标头进行排序以及在标头上动态显示上箭头和下箭头来指示排序方向。 ### 一、ListView的基础知识 ListView是WPF中的数据呈现控件,它允许用户以多种视图(如...

    wpf listview 滚动条和自动排序

    `ItemsSource_CollectionChanged`方法会在数据源发生更改时被调用,对新添加或替换的项目进行排序。请注意,这种方式可能会影响性能,特别是当数据集非常大时。因此,在实际应用中,你可能需要考虑使用更高效的排序...

    MULTISORT_LISTVIEW.rar_ListView_listview c++_listview vc_vc list

    在VC++环境中,我们经常需要对ListView中的数据进行排序,以便用户可以方便地查看和管理信息。本篇文章将详细探讨如何在VC++中实现ListView的多列排序功能。 首先,我们需要了解ListView的基本结构。ListView控件...

    ListView控件(列排序和动态隐藏)

    在这个"ListView控件(列排序和动态隐藏)"的主题中,我们将深入探讨如何实现列排序以及如何动态隐藏列。 一、ListView控件基本概念 ListView控件提供了多种视图模式,如小图标、大图标、列表和详细信息。在详细信息...

    .NET可排序的listview控件

    本文将详细探讨如何实现`.NET`中的可排序ListView控件,以及它如何根据不同的列和数据类型进行排序。 首先,了解ListView控件的基础知识是必要的。ListView控件通常包含多个列(Columns)和行(Items),每一行代表...

    实现列排序的 ListView

    为了提供更好的用户体验,我们经常需要在ListView中实现列排序的功能。本教程将详细讲解如何通过接口实现这一功能。 首先,我们要理解ListView的基本原理。ListView是通过Adapter类来绑定数据源的,Adapter将数据...

    c# listview实现按多列排序.doc

    接下来,我们需要设置`ListView`的`ListViewItemSorter`属性为我们刚刚创建的`ListViewItemsComparer`实例,并调用`ListView`的`Sort()`方法来执行排序。 ```csharp private void SortLVw() { int[] cols = new ...

Global site tag (gtag.js) - Google Analytics