ListViewItemComparer.cs

 //
// Copyright © 2006 Herbert N Swearengen III (hswear3@swbell.net)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   - Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   - Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
// OF SUCH DAMAGE.
//

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Collections;

namespace StartupManager
{

    public class ListViewItemComparer : IComparer
    {

        private int col;
        private bool sortOrder;

        #region Constructor

        public ListViewItemComparer(int column, bool order)
        {
            col = column;
            sortOrder = order;
        }

        #endregion

        #region IComparable Members

        public int Compare(object x, object y)
        {
            if (x is ListViewItem && y is ListViewItem)
            {
                try
                {
                    // Validate Inputs.
                    if (x != null && y != null)
                    {
                        // Convert x and y to a and b as ListViewItem.
                        ListViewItem a = (ListViewItem)x;
                        ListViewItem b = (ListViewItem)y;

                        if (sortOrder)
                        {
                            return String.Compare(a.SubItems[col].Text, b.SubItems[col].Text);
                        }
                        else
                        {
                            return String.Compare(b.SubItems[col].Text, a.SubItems[col].Text);
                        }

                    }
                    else
                    {
                        return 0;
                    }
                }
                catch (ArgumentOutOfRangeException)
                {
                    return 0;
                }
                catch (ArgumentException)
                {
                    return 0;
                }
            }
            else
            {
                throw new ArgumentException("Object is not a ListViewItem");
            }
        }

        #endregion
    }
}

Project Homepage: