从
http://expert.csdn.net/Expert/topic/2202/2202093.xml?temp=.3307001
学到排序的方法,现今想进一步改进成我的想要的结果,哪位能帮上忙?
http://expert.csdn.net/Expert/topic/2202/2202093.xml?temp=.3307001
学到排序的方法,现今想进一步改进成我的想要的结果,哪位能帮上忙?
调试欢乐多
public bool click=true;
private void listView2_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if(click)
{
this.listView2.Sorting=SortOrder.Ascending;
this.listView2.Sort();
click=false;
}
else
{
this.listView2.Sorting=SortOrder.Descending;
this.listView2.Sort();
click=true;
}
}
我用到
http://expert.csdn.net/Expert/topic/2202/2202093.xml?temp=.3307001
提示的方法:
比较类:
public class ListViewItemComparer : IComparer
{
private int col;
private bool convert; public ListViewItemComparer(int column,bool cvt)
{
col=column;
convert=cvt;
}
public int Compare(object x, object y)
{
if(convert)
return String.Compare(((ListViewItem)y).SubItems[col].Text, ((ListViewItem)x).SubItems[col].Text);
else
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
}应用:
private int CurrentColumn = -1; //记录上次点击的列号
private bool Convert = false; //记录正逆序信息private void listView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if(CurrentColumn == e.Column)
{
//相临两次点击同一列,排序顺序倒置
Convert = !Convert;
this.listView.ListViewItemSorter = new ListViewItemComparer(e.Column, Convert);
}
else
{
//相临两次点击不同列,记录本次点击的列号
CurrentColumn = e.Column;
//正排序
Convert = false;
this.listView.ListViewItemSorter = new ListViewItemComparer(e.Column, Convert);
}
//数据排序
listView.Sort();
}
to eyestrong: 如何结合你的思路,才使第一列的永远排序不变?
如何再单独将第一列重写一次?能否详细一点?
try:bool click = true;
private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if(e.Column == 0) return;
if(click)
this.listView1.Sorting = SortOrder.Ascending;
else
this.listView1.Sorting = SortOrder.Descending;
click = !click;
this.listView1.Sort();
int i = 0;
foreach(ListViewItem item in this.listView1.Items){
item.SubItems[0].Text = (++i).ToString();
}
}
结账!