CustomListView: Corregir comparador de columnas para que no falle ante items de lista sin las mismas columnas

This commit is contained in:
2014-09-09 13:15:58 +02:00
parent 9d77bb552b
commit ae8ce4a213

View File

@@ -57,41 +57,31 @@ namespace ServerExplorer.Controls
#region ListViewItemComparer
class ListViewItemComparer : IComparer
internal class ListViewItemComparer : IComparer
{
private int col;
private bool ascending;
private int _col;
private bool _ascending;
public void SetColumn(int col)
{
if (this.col == col)
{
ascending = ascending ? false : true;
}
else
{
this.col = col;
ascending = true;
}
_col = col;
_ascending = _col != col || !_ascending;
}
public int Compare(object x, object y)
{
int returnVal = -1;
if (ascending)
var itemA = (ListViewItem) x;
var itemB = (ListViewItem) y;
if (itemA.SubItems.Count <= _col || itemB.SubItems.Count <= _col)
{
returnVal = String.Compare(
((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);
return -1;
}
else
{
returnVal = String.Compare(
((ListViewItem)y).SubItems[col].Text,
((ListViewItem)x).SubItems[col].Text);
}
return returnVal;
return _ascending
? String.CompareOrdinal(itemA.SubItems[_col].Text, itemB.SubItems[_col].Text)
: String.CompareOrdinal(itemB.SubItems[_col].Text, itemA.SubItems[_col].Text);
}
}
#endregion
}