Click here to Skip to main content
15,899,562 members
Home / Discussions / C#
   

C#

 
GeneralRe: Key Events Pin
led mike14-Nov-07 11:17
led mike14-Nov-07 11:17 
AnswerRe: Key Events Pin
Dave Kreskowiak14-Nov-07 11:02
mveDave Kreskowiak14-Nov-07 11:02 
GeneralRe: Key Events Pin
kingletas14-Nov-07 11:13
kingletas14-Nov-07 11:13 
QuestionReorder List View Pin
Ian Uy14-Nov-07 8:19
Ian Uy14-Nov-07 8:19 
AnswerRe: Reorder List View Pin
SABhatti14-Nov-07 8:38
SABhatti14-Nov-07 8:38 
GeneralRe: Reorder List View Pin
Ian Uy14-Nov-07 17:35
Ian Uy14-Nov-07 17:35 
GeneralRe: Reorder List View Pin
SABhatti14-Nov-07 19:09
SABhatti14-Nov-07 19:09 
AnswerRe: Reorder List View Pin
DaveyM6914-Nov-07 11:22
professionalDaveyM6914-Nov-07 11:22 
I have a class that I use for this. I got the basics from a web page that I can't locate to give credit but I've ammended it quite a lot. There's probably quite a few bits 'wrong' but it works.

It uses the Tag property of each column to set the data type as String, Numeric or Date (sent as a string ie "Numeric".
If the column being sorted has two peices of identical data, it will sort recursively through any further SubItems using their Tag to determine data type.

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

namespace ListViewHandling
{
    class Sorter : IComparer
    {
        private int _SortColumn;
        private SortOrder _SortOrder;
        private string _SortType;

        public Sorter(int SortColumn, string SortType, SortOrder SortOrder)
        {
            _SortColumn = SortColumn;
            _SortOrder = SortOrder;
            _SortType = SortType;
        }

        public int Compare(object x, object y)
        {
            int Result = 0;
            ListViewItem ItemX;
            ListViewItem ItemY;
            ItemX = (ListViewItem)x;
            ItemY = (ListViewItem)y;
            switch (_SortColumn)
            {
                case 0:
                    switch (_SortType)
                    {
                        case "Numeric":
                            Result = decimal.Compare(Convert.ToDecimal(ItemX.Text), Convert.ToDecimal(ItemY.Text));
                            break;
                        case "Date":
                            Result = DateTime.Compare(DateTime.Parse(ItemX.Text), DateTime.Parse(ItemY.Text));
                            break;
                        default:
                            Result = ItemX.Text.CompareTo(ItemY.Text);
                            break;
                    }
                    break;
                default:
                    switch (_SortType)
                    {
                        case "Numeric":
                            Result = decimal.Compare(Convert.ToDecimal(ItemX.SubItems[_SortColumn].Text), Convert.ToDecimal(ItemY.SubItems[_SortColumn].Text));
                            break;
                        case "Date":
                            Result = DateTime.Compare(DateTime.Parse(ItemX.SubItems[_SortColumn].Text), DateTime.Parse(ItemY.SubItems[_SortColumn].Text));
                            break;
                        default:
                            Result = ItemX.SubItems[_SortColumn].Text.CompareTo(ItemY.SubItems[_SortColumn].Text);
                            break;
                    }
                    break;
            }
            if (Result == 0 && (ItemX.SubItems.Count - 1) > _SortColumn)
            {
                for (int i = _SortColumn + 1; i < ItemX.SubItems.Count; i++)
                {
                    switch ((string)ItemX.SubItems[i].Tag)
                    {
                        case "Numeric":
                            Result = decimal.Compare(Convert.ToDecimal(ItemX.SubItems[i].Text), Convert.ToDecimal(ItemY.SubItems[i].Text));
                            break;
                        case "Date":
                            Result = DateTime.Compare(DateTime.Parse(ItemX.SubItems[i].Text), DateTime.Parse(ItemY.SubItems[i].Text));
                            break;
                        default:
                            Result = ItemX.SubItems[i].Text.CompareTo(ItemY.SubItems[i].Text);
                            break;
                    }
                    if (Result != 0) { break; }
                }
            }
            if (_SortOrder == SortOrder.Descending)
            {
                Result = -Result;
            }
            return Result;
        }
    }
}


I fire it from the ColumnClick event but you could easily alter it

public Form1()
        {
            InitializeComponent();
            listView1.ColumnClick += new ColumnClickEventHandler(listView1_ColumnClick);
        }

        void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            listView1.ListViewItemSorter = new ListViewHandling.Sorter(e.Column, (string)listView1.Columns[e.Column].Tag, SortOrder.Ascending);
        }

GeneralRe: Reorder List View Pin
Ian Uy14-Nov-07 17:38
Ian Uy14-Nov-07 17:38 
GeneralRe: Reorder List View [modified] Pin
DaveyM6914-Nov-07 23:27
professionalDaveyM6914-Nov-07 23:27 
QuestionHow 2 Run exe from Network ? Pin
hdv21214-Nov-07 7:40
hdv21214-Nov-07 7:40 
AnswerRe: How 2 Run exe from Network ? Pin
Ian Uy14-Nov-07 8:14
Ian Uy14-Nov-07 8:14 
AnswerRe: How 2 Run exe from Network ? Pin
Dave Kreskowiak14-Nov-07 8:29
mveDave Kreskowiak14-Nov-07 8:29 
GeneralRe: How 2 Run exe from Network ? Pin
hdv21214-Nov-07 9:11
hdv21214-Nov-07 9:11 
GeneralRe: How 2 Run exe from Network ? Pin
Pete O'Hanlon14-Nov-07 9:19
mvePete O'Hanlon14-Nov-07 9:19 
GeneralRe: How 2 Run exe from Network ? Pin
Dave Kreskowiak14-Nov-07 10:37
mveDave Kreskowiak14-Nov-07 10:37 
GeneralRe: How 2 Run exe from Network ? Pin
hdv21214-Nov-07 10:26
hdv21214-Nov-07 10:26 
GeneralRe: How 2 Run exe from Network ? Pin
Dave Kreskowiak14-Nov-07 10:31
mveDave Kreskowiak14-Nov-07 10:31 
GeneralRe: How 2 Run exe from Network ? Pin
led mike14-Nov-07 10:40
led mike14-Nov-07 10:40 
GeneralRe: How 2 Run exe from Network ? Pin
Dave Kreskowiak14-Nov-07 10:56
mveDave Kreskowiak14-Nov-07 10:56 
GeneralRe: How 2 Run exe from Network ? Pin
led mike14-Nov-07 11:07
led mike14-Nov-07 11:07 
QuestionProblems at creating a WordDocument (Unwanted formation) Pin
Dirk Mahlcke14-Nov-07 7:22
Dirk Mahlcke14-Nov-07 7:22 
QuestionHow to paint UserControl or Form directly on host HDC ? Pin
gordon2414-Nov-07 6:08
gordon2414-Nov-07 6:08 
AnswerRe: How to paint UserControl or Form directly on host HDC ? Pin
Skippums14-Nov-07 11:58
Skippums14-Nov-07 11:58 
Questionhow to read from idx file Pin
SABhatti14-Nov-07 5:32
SABhatti14-Nov-07 5:32 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.