ListView排序并隔色显示
生活随笔
收集整理的這篇文章主要介紹了
ListView排序并隔色显示
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using System.Drawing;namespace STools
{class ListViewColumnSorter : IComparer{/**//// <summary>/// 指定按照哪個(gè)列排序/// </summary>private int ColumnToSort;/**//// <summary>/// 指定排序的方式/// </summary>private SortOrder OrderOfSort;/**//// <summary>/// 聲明CaseInsensitiveComparer類對(duì)象,/// 參見ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm/// </summary>private CaseInsensitiveComparer ObjectCompare; /**//// <summary>/// 構(gòu)造函數(shù)/// </summary>public ListViewColumnSorter(){// 默認(rèn)按第一列排序ColumnToSort = 0; // 排序方式為不排序OrderOfSort = SortOrder.None; // 初始化CaseInsensitiveComparer類對(duì)象ObjectCompare = new CaseInsensitiveComparer();} /**//// <summary>/// 重寫IComparer接口./// </summary>/// <param name="x">要比較的第一個(gè)對(duì)象</param>/// <param name="y">要比較的第二個(gè)對(duì)象</param>/// <returns>比較的結(jié)果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>public int Compare(object x, object y){int compareResult;ListViewItem listviewX, listviewY; // 將比較對(duì)象轉(zhuǎn)換為ListViewItem對(duì)象listviewX = (ListViewItem)x;listviewY = (ListViewItem)y; // 比較compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);//Console.WriteLine(listviewX.SubItems[ColumnToSort].Text + "<->" + listviewY.SubItems[ColumnToSort].Text+":"+compareResult);// 根據(jù)上面的比較結(jié)果返回正確的比較結(jié)果if (OrderOfSort == SortOrder.Ascending){// 因?yàn)槭钦蚺判?#xff0c;所以直接返回結(jié)果return compareResult;}else if (OrderOfSort == SortOrder.Descending){// 如果是反序排序,所以要取負(fù)值再返回return (-compareResult);}else{// 如果相等返回0return 0;}} /**//// <summary>/// 獲取或設(shè)置按照哪一列排序./// </summary>public int SortColumn{set{ColumnToSort = value;}get{return ColumnToSort;}} /**//// <summary>/// 獲取或設(shè)置排序方式./// </summary>public SortOrder Order{set{OrderOfSort = value;}get{return OrderOfSort;}}}
}
下面是應(yīng)用排序,并不同值隔色顯示
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e){ListView lv = sender as ListView;// 檢查點(diǎn)擊的列是不是現(xiàn)在的排序列. int column = (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn;//當(dāng)前排序的序列listView1.Columns[column].Text = listView1.Columns[column].Text.Replace("↓", "").Replace("↑", "");if (e.Column == (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn){// 重新設(shè)置此列的排序方法. if ((lv.ListViewItemSorter as ListViewColumnSorter).Order == SortOrder.Ascending){(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Descending;listView1.Columns[e.Column].Text += "↑";}else{(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;listView1.Columns[e.Column].Text += "↓";}}else{// 設(shè)置排序列,默認(rèn)為正向排序 (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn = e.Column;(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;listView1.Columns[e.Column].Text += "↓";}// 用新的排序方法對(duì)ListView排序 ((ListView)sender).Sort();for (int i = 0; i < listView1.Items.Count; i++){if (i != 0 && listView1.Items[i].SubItems[e.Column].Text == listView1.Items[i - 1].SubItems[e.Column].Text){listView1.Items[i].BackColor = listView1.Items[i - 1].BackColor;}else if (i == 0){listView1.Items[i].BackColor = Color.Transparent;}else{if (listView1.Items[i - 1].BackColor == Color.Transparent){listView1.Items[i].BackColor = Color.LightBlue;}else{listView1.Items[i].BackColor = Color.Transparent;}}}//listView1.Refresh();}?
?
轉(zhuǎn)載于:https://www.cnblogs.com/haorui/p/3608841.html
總結(jié)
以上是生活随笔為你收集整理的ListView排序并隔色显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FireMonkey 保存图片到JPG的
- 下一篇: 小谈@override