#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()==
"n"
)
lvw.ListViewItemSorter =
new
ListViewItemComparerNum(e.Column, sort);
else
lvw.ListViewItemSorter =
new
ListViewItemComparer(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
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);
}
}
}
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);
}
}
}