C# WinForm的ListView的排序,列标题包括排序三角形
来源:互联网 发布:淘客网站源码建立 编辑:程序博客网 时间:2024/06/05 21:04
{
string Asc = ((char)0x25bc).ToString().PadLeft(2, ' ');
string Des = ((char)0x25b2).ToString().PadLeft(2, ' ');
ListView lv = sender as ListView;
if ((lv.ListViewItemSorter as ListViewItemComparer) == null)
lv.ListViewItemSorter = new ListViewItemComparer();
ListViewItemComparer temp = (lv.ListViewItemSorter as ListViewItemComparer);
temp.StringNumOrder = true;
if (e.Column == (lv.ListViewItemSorter as ListViewItemComparer).SortColumn)
{
if ((lv.ListViewItemSorter as ListViewItemComparer).OrderType == SortOrder.Ascending)
{
(lv.ListViewItemSorter as ListViewItemComparer).OrderType = SortOrder.Descending;
//排序三角形
string oldStr = this.lsvDataCollectionView.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
this.lsvDataCollectionView.Columns[e.Column].Text = oldStr + Des;
}
else
{
(lv.ListViewItemSorter as ListViewItemComparer).OrderType = SortOrder.Ascending;
//排序三角形
string oldStr = this.lsvDataCollectionView.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
this.lsvDataCollectionView.Columns[e.Column].Text = oldStr + Asc;
}
}
else
{
(lv.ListViewItemSorter as ListViewItemComparer).SortColumn = e.Column;
(lv.ListViewItemSorter as ListViewItemComparer).OrderType = SortOrder.Ascending;
}
((ListView)sender).Sort();
}
ListView排序类
public class ListViewItemComparer: IComparer
{
#region
private CaseInsensitiveComparer _objectCompare;
private int _sortColumn;
/// <summary>
/// 获取或设置要排序的列
/// </summary>
public int SortColumn
{
get { return _sortColumn; }
set { _sortColumn = value; }
}
private SortOrder _orderType;
/// <summary>
/// 获取或设置排序方式
/// </summary>
public SortOrder OrderType
{
get { return _orderType; }
set { _orderType = value; }
}
private bool _stringNumOrder;
/// <summary>
/// 获取或设置字符串中的数字是否按照正常理解顺序排序
/// </summary>
public bool StringNumOrder
{
get { return _stringNumOrder; }
set { _stringNumOrder = value; }
}
#endregion
public ListViewItemComparer()
{
_sortColumn = 0;
_stringNumOrder = false;
_orderType = SortOrder.None;
_objectCompare = new CaseInsensitiveComparer();
}
public int Compare(object x, object y)
{
int compareResult = 0;
string stringX = ((ListViewItem)x).SubItems[_sortColumn].Text;
string stringY = ((ListViewItem)y).SubItems[_sortColumn].Text;
DateTime dtx = new DateTime();
DateTime dty = new DateTime();
int intx = new int();
int inty = new int();
double doublex = new double();
double doubley = new double();
if (DateTime.TryParse(stringX, out dtx) && DateTime.TryParse(stringY, out dty))
{
compareResult = _objectCompare.Compare(dtx, dty);
}
else if (int.TryParse(stringX, out intx) && int.TryParse(stringY, out inty))
{
compareResult = _objectCompare.Compare(intx, inty);
}
else if (double.TryParse(stringX, out doublex) && double.TryParse(stringY, out doubley))
{
compareResult = _objectCompare.Compare(doublex, doubley);
}
else
{
if (_stringNumOrder == true)
compareResult = StringNumCompare(stringX, stringY);
if (compareResult == 0)
compareResult = _objectCompare.Compare(stringX, stringY);
}
if (_orderType == SortOrder.Ascending)
{
return compareResult;
}
else if (_orderType == SortOrder.Descending)
{
return (-compareResult);
}
else
{
return 0;
}
}
//对字符串中相同位置的数字进行对比
private int StringNumCompare(string stringX, string stringY)
{
int returnValue = 0;
int stringCount = stringX.Count() > stringY.Count() ? stringY.Count() : stringX.Count();
for (int i = 0; i < stringCount; i++)
{
int tempX;
int tempY;
if ((stringX[i] != stringY[i]) && int.TryParse(stringX[i].ToString(), out tempX) && int.TryParse(stringY[i].ToString(), out tempY))
{
tempX = GetStringNum(tempX, i + 1, stringCount, stringX);
tempY = GetStringNum(tempY, i + 1, stringCount, stringY);
if (tempX > tempY)
returnValue = 1;
else if (tempX < tempY)
returnValue = -1;
if (returnValue == 0)
continue;
else
break;
}
}
return returnValue;
}
//获取字符串中的数字
private int GetStringNum(int returnValue, int i, int stringCount, string stringTemp)
{
int temp;
if (i < stringCount && int.TryParse(stringTemp[i].ToString(), out temp))
{
returnValue = returnValue * 10 + temp;
GetStringNum(returnValue, i + 1, stringCount, stringTemp);
}
return returnValue;
}
}
- C# WinForm的ListView的排序,列标题包括排序三角形
- C# WinForm的ListView的列排序
- 可点击列标题可进行排序的ListView控件
- ListView 的按列排序
- c# winform listview 拖放排序
- C# winform中listview排序
- winform dataGridView 点击列标题排序
- c# listview点击标题排序
- Winform 树listView的拖动排序
- 浅谈WinForm下ListView的扩展(一):单击列头实现排序
- 对ListView的列进行排序
- 对listview的列进行排序
- ListView点击列排序的实现
- C# 禁止 DataGridView 点击 列标题 排序
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- 在C#中实现对ListView点击列标题自动排序功能
- centos7安装mysql
- ZOJ 3452 Doraemon's Stone Game(博弈)
- mapreduce GroupingComparator mapreduce排序规则和分组规则
- 进阶1.JavaScript深入之从原型到原型链
- 湖南省第八届省赛题!!csu1119 Collecting Coins
- C# WinForm的ListView的排序,列标题包括排序三角形
- webpack-生产环境最佳实践(https://webpack.js.org/guides/production/)
- 第三章 MyBatis Mapper 的 XML 配置文件
- spring boot使用fastjson
- 安卓[Android] IOException: open failed: ENOENT (No such file or directory)
- 利用Helm简化Kubernetes应用部署
- spring-boot启动报错【This application has no explicit mapping for /error.....】
- SpringMVC中使用Interceptor拦截器
- 音视频的流程:录制、播放、编码解码、上传下载等