日期:2014-05-18  浏览次数:20936 次

只要会c#中listview控件的朋友来拿分吧
小弟刚学
先在想做一个表,是用listview做的,可是现在遇到个问题
就是这个表的clumn有4项,序号、卡号、姓名、楼号
我想进行操作是点击序号进行排序(升、降)
                            点击卡号进行排序(升、降)
  可是我实在不知道怎么获得点击的是哪项,请各位帮忙,解决问题马上送分

------解决方案--------------------
ListView.Sort()方法的功能是“对列表视图的项进行排序”,可当您调用它时却什么也没有发生,原因是您没有为listView1.ListViewItemSorter指定排序器。所以,首先必须写一个排序类。

public class mySorter:IComparer

{

private Comparer comparer;

private int sortColumn;

private SortOrder sortOrder;

public mySorter()

{

sortColumn=0;

sortOrder=SortOrder.None;

comparer=Comparer.Default;

}

//指定进行排序的列

public int SortColumn

{

get {return sortColumn;}

set {sortColumn=value;}

}

//指定按升序或降序进行排序

public SortOrder SortOrder

{

get {return sortOrder;}

set {sortOrder=value;}

}

public int Compare(object x,object y)

{

int CompareResult;

ListViewItem itemX=(ListViewItem)x;

ListViewItem itemY=(ListViewItem)y;

//在这里您可以提供自定义的排序

CompareResult=comparer.Compare(itemX.SubItems[this.sortColumn].Text,itemY.SubItems[this.sortColumn].Text);

if (this.SortOrder==SortOrder.Ascending)

return CompareResult;

else

if (this.SortOrder==SortOrder.Descending)

return (-CompareResult);

else

return 0;

}

}



如何使用这个类,很简单。新建一个Windows应用程序,加入ListView组件listView1并将其View属性设为Details。

//加入排序类

private mySorter sorter;

//修改窗体构造函数

public Form1()

{

InitializeComponent();

sorter=new myColumnSorter();

//为ListViewItemSorter指定排序类

this.listView1.ListViewItemSorter=sorter;

sorter.SortOrder=SortOrder.Ascending;

}

//给单击表头事件添加代码

private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)

{

if (e.Column==this.sorter.SortColumn)

{

if (this.sorter.SortOrder==SortOrder.Ascending)

this.sorter.SortOrder=SortOrder.Descending;

else

if (this.sorter.SortOrder==SortOrder.Descending)

this.sorter.SortOrder=SortOrder.Ascending;

else

return;

}

else

{

this.sorter.SortColumn=e.Column;

}

this.listView1.Sort();

}

如果您需要自定义排序,那么您可以修改排序器的Compare()方法。