比如有三列,姓名 性别 年龄,我单击其中某一列的表头,就按那一列的顺序排,怎么弄?网上找了些,看的不是很明白
解决方案 »
- 关于动态WebService传递byte[]数组的问题
- 请帮忙转换下代码 c++ 到 c# 或 vb.net
- 在网上找一段读TXT文件的代码,有一处不明白,请高手解答
- 学习C#需要学习JAVA语言吗?高手近来讨论讨论?
- 如何给一个文本框绑定一个数据表中对应的字段???
- 水晶报表的问题
- 哪为人兄用过idsCenter能帮忙做个snort配置、使用的图形界面程序么,急急,毕业设计不会做
- 2005.net c# datagridview 行校验不正常
- C# 怎么打印*.frf报表文件
- 如何用C#设计类似有道词典那样的迷你窗口
- 认为高手的来!!帮帮忙...
- C#中,用ArrayList定义的数组能否赋值给普通数组?
/// <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);
}