Mega Code Archive

 
Categories / C# Tutorial / GUI Windows Forms
 

ListView Sorter

using System; using System.Collections; using System.Windows.Forms; class FolderHolder: Form {     public FolderHolder()     {         InitializeComponent();     }     private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)     {         ListViewItemComparer sorter = listView1.ListViewItemSorter as ListViewItemComparer;         if (sorter == null)         {             sorter = new ListViewItemComparer(e.Column);             listView1.ListViewItemSorter = sorter;         }         else         {             sorter.Column = e.Column;         }         listView1.Sort();     }     [STAThread]     public static void Main(string[] args)     {         Application.Run(new FolderHolder());     }     private void InitializeComponent()     {         System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {"1","B","A"}, -1);         System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] {"2","A","D"}, -1);         System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem(new string[] {"4","C","B"}, -1);         this.listView1 = new System.Windows.Forms.ListView();         this.columnHeader1 = new System.Windows.Forms.ColumnHeader();         this.columnHeader2 = new System.Windows.Forms.ColumnHeader();         this.columnHeader3 = new System.Windows.Forms.ColumnHeader();         this.SuspendLayout();         //          // listView1         //          this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {this.columnHeader1,this.columnHeader2,this.columnHeader3});         this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;         this.listView1.GridLines = true;         this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {listViewItem1,listViewItem2,listViewItem3});         this.listView1.Location = new System.Drawing.Point(0, 0);         this.listView1.Size = new System.Drawing.Size(292, 266);         this.listView1.View = System.Windows.Forms.View.Details;         this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);         //          // FolderHolder         //          this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);         this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;         this.ClientSize = new System.Drawing.Size(292, 266);         this.Controls.Add(this.listView1);         this.ResumeLayout(false);     }     private System.Windows.Forms.ListView listView1;     private System.Windows.Forms.ColumnHeader columnHeader1;     private System.Windows.Forms.ColumnHeader columnHeader2;     private System.Windows.Forms.ColumnHeader columnHeader3; } public class ListViewItemComparer : IComparer {     private int column;     private bool numeric = false;     public int Column     {         get { return column; }         set { column = value; }     }     public bool Numeric     {         get { return numeric; }         set { numeric = value; }     }     public ListViewItemComparer(int columnIndex)     {         Column = columnIndex;     }     public int Compare(object x, object y)     {         ListViewItem itemX = x as ListViewItem;         ListViewItem itemY = y as ListViewItem;         if (itemX == null && itemY == null)             return 0;         else if (itemX == null)             return -1;         else if (itemY == null)             return 1;         if (itemX == itemY) return 0;         if (Numeric)         {             decimal itemXVal, itemYVal;             if (!Decimal.TryParse(itemX.SubItems[Column].Text, out itemXVal))             {                 itemXVal = 0;             }             if (!Decimal.TryParse(itemY.SubItems[Column].Text, out itemYVal))             {                 itemYVal = 0;             }             return Decimal.Compare(itemXVal, itemYVal);         } else {             string itemXText = itemX.SubItems[Column].Text;             string itemYText = itemY.SubItems[Column].Text;             return String.Compare(itemXText, itemYText);         }     } }