using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Drawing;
namespace SharpViewUtility
{
/// <summary>
/// dev control 中的ListViewEx的加强版
/// </summary>
public class SVListViewEx:DevComponents.DotNetBar.Controls.ListViewEx
{
public SVListViewEx()
{
this.ColumnClick += new ColumnClickEventHandler(SVListViewEx_ColumnClick);
this.View = View.Details;
this.GridLines = true;
this.DoubleBuffered = true;
this.Font = new Font("宋体", 10, FontStyle.Regular);
this.FullRowSelect = true;
this.ShowItemToolTips = true;
this.OwnerDraw = true;
}
/// <summary>
/// 提供排序功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void SVListViewEx_ColumnClick(object sender, ColumnClickEventArgs e)
{
SharpViewUtility.ColumnSort columnSort = new ColumnSort(e.Column);
columnSort.bAscending = (this.Sorting == System.Windows.Forms.SortOrder.Ascending);
if (columnSort.bAscending)
{
this.Sorting = SortOrder.Descending;
}
else
{
this.Sorting = SortOrder.Ascending;
}
this.ListViewItemSorter = columnSort;
}
protected override void OnDrawItem(DrawListViewItemEventArgs e)
{
if (e.ItemIndex % 2 == 0)
{
e.Item.BackColor = Color.White;
}
else
{
e.Item.BackColor = Color.WhiteSmoke;
}
base.OnDrawItem(e);
}
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
if (e.ItemIndex % 2 == 0)
{
e.SubItem.BackColor = Color.White;
}
else
{
e.SubItem.BackColor = Color.WhiteSmoke;
}
base.OnDrawSubItem(e);
}
protected override void OnResize(EventArgs e)
{
this.Columns[this.Columns.Count - 1].Width = -2;
base.OnResize(e);
}
}
internal class ColumnSort : IComparer
{
private int columnNum = 0;
public bool bAscending = true;
public ColumnSort(int column_to_sort)
{
columnNum = column_to_sort;
}
public int Compare(object a, object b)
{
System.Windows.Forms.ListViewItem listItemA = (System.Windows.Forms.ListViewItem)a;
System.Windows.Forms.ListViewItem listItemB = (System.Windows.Forms.ListViewItem)b;
if (listItemA.SubItems[columnNum] == null || listItemA.SubItems[columnNum].ToString() == string.Empty)
{
return -1;
}
if (listItemB.SubItems[columnNum] == null || listItemB.SubItems[columnNum].ToString() == string.Empty)
{
return -1;
}
if (bAscending)
{
return String.Compare(listItemA.SubItems[columnNum].ToString(), listItemB.SubItems[columnNum].ToString());
}
else
{
return -1 * String.Compare(listItemA.SubItems[columnNum].ToString(), listItemB.SubItems[columnNum].ToString());
}
}
}
}