给你个源代码,直接就可以用了。
public class DataListView : ListView
{
private DataListViewSorter columnSort;
public DataListView()
: base()
{
DoubleBuffered = true;
FullRowSelect = true;
GridLines = true;
HideSelection = false;
MultiSelect = false;
columnSort = new DataListViewSorter();
ColumnClick += new ColumnClickEventHandler(DataListView_ColumnClick);
ListViewItemSorter = columnSort;
} /// <summary>
/// Return Columns for this list. We hide the original so we can associate
/// a specialised editor with it.
/// </summary>
[Editor(typeof(DataColumnCollectionEditor), typeof(UITypeEditor))]
new public ListView.ColumnHeaderCollection Columns
{
get
{
return base.Columns;
}
} private void DataListView_ColumnClick(object sender, ColumnClickEventArgs e)
{
DataColumnHeader column = Columns[e.Column] as DataColumnHeader;
if (column == null)
return; foreach (ColumnHeader columnHeader in Columns)
columnHeader.ImageKey = null;
column.SortOrder = column.SortOrder == SortOrder.Descending ? SortOrder.Ascending : SortOrder.Descending;
columnSort.SortOrder = column.SortOrder;
columnSort.Column = e.Column;
Sort();
}
//启用或禁用排序
public bool EndableSorter
{
get { return !(ListViewItemSorter == null); }
set
{
if (value)
{
ListViewItemSorter = columnSort;
this.HeaderStyle = ColumnHeaderStyle.Clickable;
}
else
{
ListViewItemSorter = null;
HeaderStyle = ColumnHeaderStyle.Nonclickable;
}
}
} } internal class DataColumnCollectionEditor : CollectionEditor
{
public DataColumnCollectionEditor(Type t)
: base(t)
{
} protected override Type CreateCollectionItemType()
{
return typeof(DataColumnHeader);
}
}
public class DataListView : ListView
{
private DataListViewSorter columnSort;
public DataListView()
: base()
{
DoubleBuffered = true;
FullRowSelect = true;
GridLines = true;
HideSelection = false;
MultiSelect = false;
columnSort = new DataListViewSorter();
ColumnClick += new ColumnClickEventHandler(DataListView_ColumnClick);
ListViewItemSorter = columnSort;
} /// <summary>
/// Return Columns for this list. We hide the original so we can associate
/// a specialised editor with it.
/// </summary>
[Editor(typeof(DataColumnCollectionEditor), typeof(UITypeEditor))]
new public ListView.ColumnHeaderCollection Columns
{
get
{
return base.Columns;
}
} private void DataListView_ColumnClick(object sender, ColumnClickEventArgs e)
{
DataColumnHeader column = Columns[e.Column] as DataColumnHeader;
if (column == null)
return; foreach (ColumnHeader columnHeader in Columns)
columnHeader.ImageKey = null;
column.SortOrder = column.SortOrder == SortOrder.Descending ? SortOrder.Ascending : SortOrder.Descending;
columnSort.SortOrder = column.SortOrder;
columnSort.Column = e.Column;
Sort();
}
//启用或禁用排序
public bool EndableSorter
{
get { return !(ListViewItemSorter == null); }
set
{
if (value)
{
ListViewItemSorter = columnSort;
this.HeaderStyle = ColumnHeaderStyle.Clickable;
}
else
{
ListViewItemSorter = null;
HeaderStyle = ColumnHeaderStyle.Nonclickable;
}
}
} } internal class DataColumnCollectionEditor : CollectionEditor
{
public DataColumnCollectionEditor(Type t)
: base(t)
{
} protected override Type CreateCollectionItemType()
{
return typeof(DataColumnHeader);
}
}
{
private SortOrder sortOrder;
private int column;
private TravelListItemComparer numberComparer; internal DataListViewSorter()
{
numberComparer = new TravelListItemComparer();
} public int Compare(object x, object y)
{
int compareResult;
string first, secondly;
ListViewItem item = x as ListViewItem;
first = item == null ? string.Empty : item.SubItems[column].Text;
item = y as ListViewItem;
secondly = item == null ? string.Empty : item.SubItems[column].Text;
compareResult = numberComparer.Compare(first, secondly);
return sortOrder == SortOrder.Ascending ? compareResult : -compareResult;
} public SortOrder SortOrder
{
set { sortOrder = value; }
get { return sortOrder; }
} public int Column
{
get { return column; }
set { column = value; }
}
} public class TravelListItemComparer : CaseInsensitiveComparer
{ public TravelListItemComparer() : base(CultureInfo.InvariantCulture) { } public new int Compare(object itemX, object itemY)
{
if (Information.IsDate(itemX) && Information.IsDate(itemY))
return base.Compare(Convert.ToDateTime(itemX), Convert.ToDateTime(itemY));
else if (!Information.IsNumeric(itemX) || !Information.IsNumeric(itemY))
return base.Compare(itemX, itemY);
return base.Compare(
Convert.ToDouble(itemX, CultureInfo.InvariantCulture),
Convert.ToDouble(itemY, CultureInfo.InvariantCulture));
}
}
{
/// <summary>
/// 构造
/// </summary>
/// <param name="text">列标题名称</param>
public DataColumnHeader(string text)
: base()
{
this.Text = text;
} /// <summary>
/// 构造
/// </summary>
public DataColumnHeader() : base() { } /// <summary>
///
/// </summary>
/// <param name="text">列标题名称</param>
/// <param name="width">列宽</param>
public DataColumnHeader(string text, int width)
: this(text)
{
this.Width = width;
} private SortOrder sortOrder; /// <summary>
/// 获取或设置列当前的排序方式
/// </summary>
public SortOrder SortOrder
{
get { return sortOrder; }
set
{
sortOrder = value;
ImageKey = sortOrder.ToString();
}
} /// <summary>
///
/// </summary>
/// <param name="text">列标题名称</param>
/// <param name="width">列宽</param>
/// <param name="textAlign">列内容位置</param>
public DataColumnHeader(string text, int width, HorizontalAlignment textAlign)
: this(text, width)
{
this.TextAlign = textAlign;
}
}