ListView的Column排序方法
系统
2121 0
ListView的Column排序是很常见的功能。具体实现的时候,主要是下面几步:
1、创建两个类
2、重载ColumnClick方法。
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
System.Collections;
namespace
test
...
{
public
partial
class
Form1:Form
...
{
public
Form1()
...
{
InitializeComponent();
}
private
void
listView1_ColumnClick(
object
sender,ColumnClickEventArgse)
...
{
//
CreateaninstanceoftheColHeaderclass.
ColHeaderclickedCol
=
(ColHeader)
this
.listView1.Columns[e.Column];
//
Settheascendingpropertytosortintheoppositeorder.
clickedCol.ascending
=
!
clickedCol.ascending;
//
Getthenumberofitemsinthelist.
int
numItems
=
this
.listView1.Items.Count;
//
Turnoffdisplaywhiledataisrepoplulated.
this
.listView1.BeginUpdate();
//
PopulateanArrayListwithaSortWrapperofeachlistitem.
ArrayListSortArray
=
new
ArrayList();
for
(
int
i
=
0
;i
<
numItems;i
++
)
...
{
SortArray.Add(
new
SortWrapper(
this
.listView1.Items[i],e.Column));
}
//
SorttheelementsintheArrayListusinganewinstanceoftheSortComparer
//
class.Theparametersarethestartingindex,thelengthoftherangetosort,
//
andtheIComparerimplementationtouseforcomparingelements.Notethat
//
theIComparerimplementation(SortComparer)requiresthesort
//
directionforitsconstructor;trueifascending,othwisefalse.
SortArray.Sort(
0
,SortArray.Count,
new
SortWrapper.SortComparer(clickedCol.ascending));
//
Clearthelist,andrepopulatewiththesorteditems.
this
.listView1.Items.Clear();
for
(
int
i
=
0
;i
<
numItems;i
++
)
this
.listView1.Items.Add(((SortWrapper)SortArray[i]).sortItem);
//
Turndisplaybackon.
this
.listView1.EndUpdate();
}
private
void
button1_Click(
object
sender,EventArgse)
...
{
this
.listView1.View
=
View.Details;
//
AddcolumnsusingtheColHeaderclass.Thefourth
//
parameterspecifiestrueforanascendingsortorder.
listView1.Columns.Add(
new
ColHeader(
"
Name
"
,
110
,HorizontalAlignment.Left,
true
));
listView1.Columns.Add(
new
ColHeader(
"
Region
"
,
50
,HorizontalAlignment.Left,
true
));
listView1.Columns.Add(
new
ColHeader(
"
Sales
"
,
70
,HorizontalAlignment.Left,
true
));
//
Addthedata.
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Archer,Karen
"
,
"
4
"
,
"
0521.28
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Benson,Max
"
,
"
8
"
,
"
0828.54
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Bezio,Marin
"
,
"
3
"
,
"
0535.22
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Higa,Sidney
"
,
"
2
"
,
"
0987.50
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Martin,Linda
"
,
"
6
"
,
"
1122.12
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Nash,Mike
"
,
"
7
"
,
"
1030.11
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Sanchez,Ken
"
,
"
1
"
,
"
0958.78
"
}
));
listView1.Items.Add(
new
ListViewItem(
new
string
[]
...
{
"
Smith,Ben
"
,
"
5
"
,
"
0763.25
"
}
));
//
ConnecttheListView.ColumnClickeventtotheColumnClickeventhandler.
this
.listView1.ColumnClick
+=
new
ColumnClickEventHandler(listView1_ColumnClick);
}
}
public
class
ColHeader:ColumnHeader
...
{
public
bool
ascending;
public
ColHeader(
string
text,
int
width,HorizontalAlignmentalign,
bool
asc)
...
{
this
.Text
=
text;
this
.Width
=
width;
this
.TextAlign
=
align;
this
.ascending
=
asc;
}
}
class
SortWrapper
...
{
internal
ListViewItemsortItem;
internal
int
sortColumn;
//
ASortWrapperrequirestheitemandtheindexoftheclickedcolumn.
public
SortWrapper(ListViewItemItem,
int
iColumn)
...
{
sortItem
=
Item;
sortColumn
=
iColumn;
}
//
Textpropertyforgettingthetextofanitem.
public
string
Text
...
{
get
...
{
return
sortItem.SubItems[sortColumn].Text;
}
}
//
ImplementationoftheIComparer
//
interfaceforsortingArrayListitems.
public
class
SortComparer:IComparer
...
{
bool
ascending;
//
Constructorrequiresthesortorder;
//
trueifascending,otherwisedescending.
public
SortComparer(
bool
asc)
...
{
this
.ascending
=
asc;
}
//
ImplemnentationoftheIComparer:Compare
//
methodforcomparingtwoobjects.
public
int
Compare(
object
x,
object
y)
...
{
SortWrapperxItem
=
(SortWrapper)x;
SortWrapperyItem
=
(SortWrapper)y;
string
xText
=
xItem.sortItem.SubItems[xItem.sortColumn].Text;
string
yText
=
yItem.sortItem.SubItems[yItem.sortColumn].Text;
return
xText.CompareTo(yText)
*
(
this
.ascending
?
1
:
-
1
);
}
}
}
}
ListView的Column排序方法
更多文章、技术交流、商务合作、联系博主
微信扫码或搜索:z360901061
微信扫一扫加我为好友
QQ号联系: 360901061
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。
【本文对您有帮助就好】元