繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> 抛砖引玉——实现LISTVIEW点击COLUMN排序的代码,可实现按时间,字符,数字排序(控件

抛砖引玉——实现LISTVIEW点击COLUMN排序的代码,可实现按时间,字符,数字排序(控件

2007-07-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:using System; using System.ComponentModel; using System.Collections; using System.Diagnostics; using System.Windows.Forms; using System.Drawing; namespace ListViewControl { /// /// Summary descri...

using System;

using System.ComponentModel;

using System.Collections;

using System.Diagnostics;

using System.Windows.Forms;

using System.Drawing;

namespace ListViewControl

{

///

/// Summary description for UserControl1.

///

public class EastSpider : System.Windows.Forms.ListView

{

///

/// Required designer variable.

///

///

private Comparer myComparer;

private ArrayList colTypes = new ArrayList();

private System.ComponentModel.Container components = null;

///

/// Sort Interface

///

public class Comparer : IComparer

{

private int column;

private int sign;

private EastSpider.ColumnTypeEnum colType;

public Comparer()

{

column = 0;

sign = 1;

colType = EastSpider.ColumnTypeEnum.ColumnTypeText;

}

public int Column

{

set

{

column = value;

}

get

{

return column;

}

}

public int Sign

{

set

{

sign = value;

}

get

{

return sign;

}

}

public ColumnTypeEnum ColType

{

set

{

colType = value;

}

get

{

return colType;

}

}

public int Compare(object o1,object o2)

{

ListViewItem li1 = (ListViewItem)o1;

ListViewItem li2 = (ListViewItem)o2;

string s1,s2;

try

{

if (column == 0)

{

s1 = li1.Text;

s2 = li2.Text;

//return sign * String.Compare(s1,s2);

}

else

{

s1 = li1.SubItems[column].Text;

s2 = li2.SubItems[column].Text;

}

if (s1.Length == 0)

{

if (s2.Length > 0)

{

return (-sign);

}

else

{

return 0;

}

}

else if (s2.Length == 0)

{

return sign;

}

switch (colType)

{

case ColumnTypeEnum.ColumnTypeNumber:

long d1 = long.Parse(s1);

long d2 = long.Parse(s2);

if (d1 < d2)

{

return (-sign);

}

else if (d1 > d2)

{

return sign;

}

else

{

return 0;

}

case ColumnTypeEnum.ColumnTypeDate:

DateTime t1 = DateTime.Parse(s1);

DateTime t2 = DateTime.Parse(s2);

return sign*DateTime.Compare(t1,t2);

default:

return sign * String.Compare(s1,s2);

}

}

catch

{

return (0);

}

}

}

///

/// 排序类型

///

[Category("SortType"),Description("The Sort Type of Column you wanted do")]

public enum ColumnTypeEnum

{

ColumnTypeText = 0,

ColumnTypeDate = 1,

ColumnTypeNumber = 2

}

///

/// Clear All Items And Columns

///

private void ClearAll()

{

Clear();

ClearColumns();

}

///

/// Clear All Item

///

private new void Clear()

{

base.Items.Clear();

}

///

/// Clear All Columns And ColType

///

private void ClearColumns()

{

base.Columns.Clear();

colTypes.Clear();

}

public void AddColumn(string caption,ColumnTypeEnum columnType,HorizontalAlignment ha,int width)

{

ColumnHeader ch = new ColumnHeader();

ch.Text = caption;

ch.TextAlign = ha;

ch.Width = width;

base.Columns.Add(ch);

colTypes.Add(columnType);

}

///

/// Add Items

///

///

///

///

public int AddRow(ListViewItem item,Color bgcolor)

{

//ListViewItem li = new ListViewItem(args);

item.UseItemStyleForSubItems = true;

item.BackColor = bgcolor;

Items.Add(item);

return item.Index;

}

///

/// 点击事件

///

///

///

protected void ev_ColumnClick(object sender,System.Windows.Forms.ColumnClickEventArgs e)

{

//MessageBox.Show(e.Column.ToString());

myComparer.Column = e.Column;

myComparer.Sign = (base.Sorting == SortOrder.Ascending)? -1:1;

myComparer.ColType = (ColumnTypeEnum)colTypes[e.Column];

base.BeginUpdate();

switch (base.Sorting)

{

case SortOrder.Ascending:

base.Sorting = SortOrder.Descending;

break;

case SortOrder.Descending:

base.Sorting = SortOrder.Ascending;

break;

}

base.EndUpdate();

}

///

/// Override onclick

///

///

protected override void OnClick( System.EventArgs e)

{

base.OnClick(e);

}

///

/// Override OnMouseDown

///

///

protected override void OnMouseDown( System.Windows.Forms.MouseEventArgs e)

{

OnClick(e);

}

///

/// InitializeComponent

///

public EastSpider()

{

// This call is required by the Windows.Forms Form Designer.

base.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.ev_ColumnClick);

myComparer = new Comparer();

base.ListViewItemSorter = (IComparer)myComparer;

//InitializeComponent();

// TODO: Add any initialization after the InitForm call

}

///

/// Clean up any resources being used.

///

protected override void Dispose( bool disposing )

{

if( disposing )

{

//if (components != null)

//{

// components.Dispose();

//}

colTypes.Clear();

base.Dispose(disposing);

}

}

#region Component Designer generated code

///

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

components = new System.ComponentModel.Container();

}

#endregion

}

}

责任编辑:admin
相关文章