#region 自定義變量
int currentCol = -1;
bool sort;
#endregion
//列頭點擊事件
private void lvw_ColumnClick(object sender, ColumnClickEventArgs e)
{
string Asc = ((char)0x25bc).ToString().PadLeft(4, ' ');
string Des = ((char)0x25b2).ToString().PadLeft(4, ' ');
if (sort == false)
{
sort = true;
string oldStr = this.lvw.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
this.lvw.Columns[e.Column].Text = oldStr + Des;
}
else if (sort == true)
{
sort = false;
string oldStr = this.lvw.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
this.lvw.Columns[e.Column].Text = oldStr + Asc;
}
if(lvw.Columns[e.Column].Tag.ToString()=="text")//在設(shè)計器中把列頭的tag設(shè)為"text",則表示該列按文本比較器處理
{
lvw.ListViewItemSorter = new ListViewItemComparer(e.Column, sort);
}
if(lvw.Columns[e.Column].Tag.ToString()=="num")//在設(shè)計器中把列頭的tag設(shè)為"num",則表示該列按數(shù)字比較器處理
{
lvw.ListViewItemSorter = new ListViewItemComparerNum(e.Column, sort);
}
if(lvw.Columns[e.Column].Tag.ToString()=="time")//在設(shè)計器中把列頭的tag設(shè)為"time",則表示該列按日期比較器處理
{
lvw.ListViewItemSorter = new ListViewItemComparerTime(e.Column, sort);
}
this.lvw.Sort();
int rowCount = this.lvw.Items.Count;
if (currentCol != -1)
{
if (e.Column != currentCol)
{
this.lvw.Columns[currentCol].Text = this.lvw.Columns[currentCol].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
}
}
currentCol = e.Column;
}
//文本比較器
public class ListViewItemComparer : IComparer
{
public bool sort_b;
public SortOrder order = SortOrder.Ascending;
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column, bool sort)
{
col = column;
sort_b = sort;
}
public int Compare(object x, object y)
{
if (sort_b)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
else
{
return String.Compare(((ListViewItem)y).SubItems[col].Text, ((ListViewItem)x).SubItems[col].Text);
}
}
}
//數(shù)字比較器
public class ListViewItemComparerNum : IComparer
{
public bool sort_b;
public SortOrder order = SortOrder.Ascending;
private int col;
public ListViewItemComparerNum()
{
col = 0;
}
public ListViewItemComparerNum(int column, bool sort)
{
col = column;
sort_b = sort;
}
public int Compare(object x, object y)
{
decimal d1=Convert.ToDecimal(((ListViewItem)x).SubItems[col].Text);
decimal d2=Convert.ToDecimal(((ListViewItem)y).SubItems[col].Text);
if (sort_b)
{
return decimal.Compare(d1,d2);
}
else
{
return decimal.Compare(d2,d1);
}
}
}
//日期比較器
public class ListViewItemComparerTime : IComparer
{
public bool sort_b;
public SortOrder order = SortOrder.Ascending;
private int col;
public ListViewItemComparerTime()
{
col = 0;
}
public ListViewItemComparerTime(int column, bool sort)
{
col = column;
sort_b = sort;
}
public int Compare(object x, object y)
{
DateTime d1 = Convert.ToDateTime(((ListViewItem)x).SubItems[col].Text);
DateTime d2 = Convert.ToDateTime(((ListViewItem)y).SubItems[col].Text);
if (sort_b)
{
return DateTime.Compare(d1, d2);
}
else
{
return DateTime.Compare(d2, d1);
}
}
}
該文章在 2024/10/14 16:05:03 編輯過