System.Windows.Forms.TableView.Sort C# (CSharp) Method

Sort() public method

public Sort ( TableColumn column, ListSortDirection direction ) : void
column TableColumn
direction ListSortDirection
return void
        public virtual void Sort(TableColumn column, ListSortDirection direction)
        {
            if (column == null) return;

            int columnIndex = Columns.FindIndex(column);
            Dictionary<TableRow, object[]> items = new Dictionary<TableRow, object[]>();
            for (int i = 0; i < Rows.Count; i++)
            {
                var r = Rows[i];
                items.Add(r, r.Items);
            }

            var itemsList = items.ToList();
            if (direction == ListSortDirection.Ascending)
                itemsList.Sort((x, y) =>
                {
                    var v1 = x.Value[columnIndex];
                    var v2 = y.Value[columnIndex];

                    if (v1 == null && v2 == null)
                        return 0;

                    if (v1 == null)
                        return -1;
                    if (v2 == null)
                        return 1;

                    var we = v1.ToString().CompareTo(v2.ToString());
                    return we;
                });
            else
                itemsList.Sort((x, y) =>
                {
                    var v1 = x.Value[columnIndex];
                    var v2 = y.Value[columnIndex];

                    if (v1 == null && v2 == null)
                        return 0;

                    if (v1 == null)
                        return 1;
                    if (v2 == null)
                        return -1;

                    var we = v1.ToString().CompareTo(v2.ToString());
                    return -we;
                });

            Rows.ClearList();

            for (int i = 0; i < itemsList.Count; i++)
                Rows.Add(itemsList[i].Key);

            AlignRows();

            if (lastSortedColumn != null)
                lastSortedColumn.control.Padding = new Padding(8, 0, 8, 0);
            lastSortedColumn = column;
            lastSortedColumn.control.Padding = new Padding(24, 0, 8, 0);
        }

Usage Example

Example #1
0
            protected override void OnMouseUp(MouseEventArgs e)
            {
                base.OnMouseUp(e);

                if (resizeType != resizeTypes.None)
                {
                    return;
                }
                if (table == null)
                {
                    return;
                }

                switch (e.Button)
                {
                case MouseButtons.Left:
                    // Sort.
                    lastSortDirection = GetNextSortDirection();
                    table.Sort(column, lastSortDirection);
                    break;

                case MouseButtons.Right:
                    // Create context menu.
                    ContextMenuStrip contextMenu = new ContextMenuStrip();

                    var itemSort = new ToolStripMenuItem("Sort");
                    contextMenu.Items.Add(itemSort);

                    var itemSortAsc = new ToolStripMenuItem("Ascending");
                    itemSortAsc.Click += (s, a) =>
                    {
                        lastSortDirection = ListSortDirection.Ascending;
                        table.Sort(column, lastSortDirection);
                    };
                    var itemSortDesc = new ToolStripMenuItem("Descending");
                    itemSortDesc.Click += (s, a) =>
                    {
                        lastSortDirection = ListSortDirection.Descending;
                        table.Sort(column, lastSortDirection);
                    };

                    itemSort.DropDownItems.Add(itemSortAsc);
                    itemSort.DropDownItems.Add(itemSortDesc);

                    contextMenu.Show(null, MousePosition);
                    break;
                }
            }