#region ListView排序类 /// <summary> /// ListView排序类 /// </summary> public class ListViewItemComparer : IComparer { private int col; private SortOrder order; public ListViewItemComparer() { col=0; order = SortOrder.Ascending; } public ListViewItemComparer(int column , SortOrder order) { col=column; this.order = order; } public int Compare(object x, object y) { int returnVal = -1; returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,((ListViewItem)y).SubItems[col].Text); if(order == SortOrder.Descending) returnVal *= -1 ; return returnVal; } } #endregion 调用: private int sortColumn = -1; private void lvGroupDetail_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e) { if( e.Column < 4 ) //前3列可以排序 { if (e.Column != sortColumn) { sortColumn = e.Column; lvGroupDetail.Sorting = SortOrder.Ascending; } else { if (lvGroupDetail.Sorting == SortOrder.Ascending) lvGroupDetail.Sorting = SortOrder.Descending; else lvGroupDetail.Sorting = SortOrder.Ascending; }
this.lvGroupDetail.ListViewItemSorter = new Comm.Functions.ListViewItemComparer(e.Column ,lvGroupDetail.Sorting ) ; lvGroupDetail.Sort(); } }
#region 关于排序的类 /// <summary> /// 对列表视图的项进行排序(升序) /// </summary>//col为要排序的列索引,cla为点击以后排序的数据类型,1为文本,2为数字,3为日期 public class UserListSortA : IComparer { private int col,cla; public UserListSortA() { col=0; } public UserListSortA(int column) { col=column; } public UserListSortA(int Column,int Class) { col=Column; cla=Class; } public int Compare(object x, object y) { int a=0;
/// <summary>
/// ListView排序类
/// </summary>
public class ListViewItemComparer : IComparer
{
private int col;
private SortOrder order; public ListViewItemComparer()
{
col=0;
order = SortOrder.Ascending;
}
public ListViewItemComparer(int column , SortOrder order)
{
col=column;
this.order = order;
}
public int Compare(object x, object y)
{
int returnVal = -1;
returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,((ListViewItem)y).SubItems[col].Text); if(order == SortOrder.Descending)
returnVal *= -1 ;
return returnVal;
}
}
#endregion
调用:
private int sortColumn = -1;
private void lvGroupDetail_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
if( e.Column < 4 ) //前3列可以排序
{
if (e.Column != sortColumn)
{
sortColumn = e.Column;
lvGroupDetail.Sorting = SortOrder.Ascending;
}
else
{
if (lvGroupDetail.Sorting == SortOrder.Ascending)
lvGroupDetail.Sorting = SortOrder.Descending;
else
lvGroupDetail.Sorting = SortOrder.Ascending;
}
this.lvGroupDetail.ListViewItemSorter = new Comm.Functions.ListViewItemComparer(e.Column ,lvGroupDetail.Sorting ) ;
lvGroupDetail.Sort();
}
}
#region 关于排序的类
/// <summary>
/// 对列表视图的项进行排序(升序)
/// </summary>//col为要排序的列索引,cla为点击以后排序的数据类型,1为文本,2为数字,3为日期
public class UserListSortA : IComparer
{
private int col,cla;
public UserListSortA()
{
col=0;
}
public UserListSortA(int column)
{
col=column;
}
public UserListSortA(int Column,int Class)
{
col=Column;
cla=Class;
} public int Compare(object x, object y)
{
int a=0;
if(cla==1)
{
try
{
return String.Compare(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text, ((System.Windows.Forms.ListViewItem)y).SubItems[col].Text);
}
catch
{
return 0;
}
}
else
{
if(cla==2)
{
try
{
if(decimal.Parse (((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)==decimal.Parse (((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 0;
if(decimal.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)>decimal.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 1;
if(decimal.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)<decimal.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a=-1;
return a;
}
catch
{
return 0;
}
}
else
{
try
{
if(DateTime.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)==DateTime.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 0;
if(DateTime.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)>DateTime.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 1;
if(DateTime.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)<DateTime.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a=-1;
return a;
}
catch
{
return 0;
}
}
}
}
} /// <summary>
/// 对列表视图的项进行排序(降序)
/// </summary>
//col为要排序的列索引,cla为点击以后排序的数据类型,1为文本,2为数字,3为日期
public class UserListSortD : IComparer
{
private int col,cla;
public UserListSortD()
{
col=0;
}
public UserListSortD(int column)
{
col=column;
}
public UserListSortD(int Column,int Class)
{
col=Column;
cla=Class;
} public int Compare(object x, object y)
{
int a=0;
if(cla==1)
{
try
{
return String.Compare(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text, ((System.Windows.Forms.ListViewItem)x).SubItems[col].Text);
}
catch
{
return 0;
}
}
else
{
if(cla==2)
{
try
{
if(decimal.Parse (((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)==decimal.Parse (((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 0;
if(decimal.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)<decimal.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 1;
if(decimal.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)>decimal.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a=-1;
return a;
}
catch
{
return 0;
}
}
else
{
try
{
if(DateTime.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)==DateTime.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 0;
if(DateTime.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)<DateTime.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a= 1;
if(DateTime.Parse(((System.Windows.Forms.ListViewItem)x).SubItems[col].Text)>DateTime.Parse(((System.Windows.Forms.ListViewItem)y).SubItems[col].Text))
a=-1;
return a;
}
catch
{
return 0;
}
}
}
}
}
#endregion
//调用的函数
/// <summary>
/// 对选定的列表视图进行按点击的列排序
/// </summary>
/// <param name="L">列表</param>
/// <param name="id">升序或降序</param>
/// <param name="eColumn">点击的列索引</param>
/// <param name="cla">单击列的数据类型数组,以列索引为序,1为文本,2 为数字,3为日期</param>
public static void paixu(System.Windows.Forms.ListView L, int id, int eColumn, int[] cla)
{
if (L.View == View.Details)
{
if (id % 2 == 0)
//倒序
L.ListViewItemSorter = new fun.UserListSortD(eColumn, cla[eColumn]); else
//升序
L.ListViewItemSorter = new fun.UserListSortA(eColumn, cla[eColumn]); L.Sort();
}
}//点击列标题事件
private void listView3_ColumnClick(object sender, ColumnClickEventArgs e)
{
lis++;
//排序
module.ggmk.paixu(this.listView3, lis, e.Column, dataclass1 );
//dataclass1是开始定义的一个所有列的类型数组,文本1数字2日期为3
//module.ggmk.backcolor(this.listView3);
}