views:

152

answers:

2

I need to sort the data contained within a number of listboxes. The user will be able to select between two different types of sorting using radio boxes, one of which is checked by default on form load. I have created the IF statements needed in order to test whether the checked condition is true for that radio button. but i need some help to create the custom sort algorithms.

Each list with contain similar looking data, the only difference in the prefix with which each line starts. For example each line in the first listbox starts with the prefix "G30" and the second listbox will be "G31" and so on. There are 10 listboxes in total (G30-G39 in terms of prefixes).

The first search algorithm has to sort the lines by the number order of the first 13 chars.

Example: This is how the data looks before sorting

G35:45:58:11 JG07
G35:45:20:41 JG01
G35:58:20:21 JG03
G35:66:22:20 JG05
G35:45:85:21 JG02
G35:64:56:11 JG03
G35:76:35:11 JG02
G35:77:97:12 JG03
G35:54:29:11 JG01
G35:55:51:20 JG01
G35:76:24:20 JG06
G35:76:55:11 JG01

and this is how it should look after sorting

G35:45:20:41 JG01
G35:45:58:11 JG07
G35:45:85:21 JG02
G35:54:29:11 JG01
G35:55:51:20 JG01
G35:58:20:21 JG03
G35:64:56:11 JG03
G35:66:22:20 JG05
G35:76:24:20 JG06
G35:76:35:11 JG02
G35:76:55:11 JG01
G35:77:97:12 JG03

as you can see, the prefixes are the same. so it is sorted, lowest first, by the next pair integers, then the next pair and the next but not by the value after "JG".

the second sort algorithm will ignore the first 13 chars and sort by order of the value after "JG", highest first.

any help? theres some rep in it for you :)

thanks in advance

Edit

namespace Jumpgate_Network_Program
{
    partial class ViewForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;


    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.tabconSubsectors = new System.Windows.Forms.TabControl();
        this.tabG30 = new System.Windows.Forms.TabPage();
        this.lstG30 = new System.Windows.Forms.ListBox();
        this.tabG31 = new System.Windows.Forms.TabPage();
        this.lstG31 = new System.Windows.Forms.ListBox();
        this.tabG32 = new System.Windows.Forms.TabPage();
        this.lstG32 = new System.Windows.Forms.ListBox();
        this.tabG33 = new System.Windows.Forms.TabPage();
        this.lstG33 = new System.Windows.Forms.ListBox();
        this.tabG34 = new System.Windows.Forms.TabPage();
        this.lstG34 = new System.Windows.Forms.ListBox();
        this.tabG35 = new System.Windows.Forms.TabPage();
        this.lstG35 = new System.Windows.Forms.ListBox();
        this.tabG36 = new System.Windows.Forms.TabPage();
        this.lstG36 = new System.Windows.Forms.ListBox();
        this.tabG37 = new System.Windows.Forms.TabPage();
        this.lstG37 = new System.Windows.Forms.ListBox();
        this.tabG38 = new System.Windows.Forms.TabPage();
        this.lstG38 = new System.Windows.Forms.ListBox();
        this.tabG39 = new System.Windows.Forms.TabPage();
        this.lstG39 = new System.Windows.Forms.ListBox();
        this.tabSearch = new System.Windows.Forms.TabPage();
        this.btnSearch = new System.Windows.Forms.Button();
        this.txtSearch = new System.Windows.Forms.TextBox();
        this.lstResult = new System.Windows.Forms.ListBox();
        this.label1 = new System.Windows.Forms.Label();
        this.grpOptions = new System.Windows.Forms.GroupBox();
        this.rbtnHighest = new System.Windows.Forms.RadioButton();
        this.rbtnCoord = new System.Windows.Forms.RadioButton();
        this.tabconSubsectors.SuspendLayout();
        this.tabG30.SuspendLayout();
        this.tabG31.SuspendLayout();
        this.tabG32.SuspendLayout();
        this.tabG33.SuspendLayout();
        this.tabG34.SuspendLayout();
        this.tabG35.SuspendLayout();
        this.tabG36.SuspendLayout();
        this.tabG37.SuspendLayout();
        this.tabG38.SuspendLayout();
        this.tabG39.SuspendLayout();
        this.tabSearch.SuspendLayout();
        this.grpOptions.SuspendLayout();
        this.SuspendLayout();
        // 
        // tabconSubsectors
        // 
        this.tabconSubsectors.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
        this.tabconSubsectors.Controls.Add(this.tabG30);
        this.tabconSubsectors.Controls.Add(this.tabG31);
        this.tabconSubsectors.Controls.Add(this.tabG32);
        this.tabconSubsectors.Controls.Add(this.tabG33);
        this.tabconSubsectors.Controls.Add(this.tabG34);
        this.tabconSubsectors.Controls.Add(this.tabG35);
        this.tabconSubsectors.Controls.Add(this.tabG36);
        this.tabconSubsectors.Controls.Add(this.tabG37);
        this.tabconSubsectors.Controls.Add(this.tabG38);
        this.tabconSubsectors.Controls.Add(this.tabG39);
        this.tabconSubsectors.Controls.Add(this.tabSearch);
        this.tabconSubsectors.Location = new System.Drawing.Point(13, 39);
        this.tabconSubsectors.Name = "tabconSubsectors";
        this.tabconSubsectors.SelectedIndex = 0;
        this.tabconSubsectors.Size = new System.Drawing.Size(282, 305);
        this.tabconSubsectors.TabIndex = 0;
        // 
        // tabG30
        // 
        this.tabG30.Controls.Add(this.lstG30);
        this.tabG30.Location = new System.Drawing.Point(4, 22);
        this.tabG30.Name = "tabG30";
        this.tabG30.Padding = new System.Windows.Forms.Padding(3);
        this.tabG30.Size = new System.Drawing.Size(274, 279);
        this.tabG30.TabIndex = 0;
        this.tabG30.Text = "G30";
        this.tabG30.UseVisualStyleBackColor = true;
        // 
        // lstG30
        // 
        this.lstG30.FormattingEnabled = true;
        this.lstG30.Location = new System.Drawing.Point(7, 7);
        this.lstG30.Name = "lstG30";
        this.lstG30.Size = new System.Drawing.Size(259, 264);
        this.lstG30.TabIndex = 0;
        // 
        // tabG31
        // 
        this.tabG31.Controls.Add(this.lstG31);
        this.tabG31.Location = new System.Drawing.Point(4, 22);
        this.tabG31.Name = "tabG31";
        this.tabG31.Padding = new System.Windows.Forms.Padding(3);
        this.tabG31.Size = new System.Drawing.Size(274, 279);
        this.tabG31.TabIndex = 1;
        this.tabG31.Text = "G31";
        this.tabG31.UseVisualStyleBackColor = true;
        // 
        // lstG31
        // 
        this.lstG31.FormattingEnabled = true;
        this.lstG31.Location = new System.Drawing.Point(8, 7);
        this.lstG31.Name = "lstG31";
        this.lstG31.Size = new System.Drawing.Size(259, 264);
        this.lstG31.TabIndex = 1;
        // 
        // tabG32
        // 
        this.tabG32.Controls.Add(this.lstG32);
        this.tabG32.Location = new System.Drawing.Point(4, 22);
        this.tabG32.Name = "tabG32";
        this.tabG32.Padding = new System.Windows.Forms.Padding(3);
        this.tabG32.Size = new System.Drawing.Size(274, 279);
        this.tabG32.TabIndex = 2;
        this.tabG32.Text = "G32";
        this.tabG32.UseVisualStyleBackColor = true;
        // 
        // lstG32
        // 
        this.lstG32.FormattingEnabled = true;
        this.lstG32.Location = new System.Drawing.Point(8, 7);
        this.lstG32.Name = "lstG32";
        this.lstG32.Size = new System.Drawing.Size(259, 264);
        this.lstG32.TabIndex = 1;
        // 
        // tabG33
        // 
        this.tabG33.Controls.Add(this.lstG33);
        this.tabG33.Location = new System.Drawing.Point(4, 22);
        this.tabG33.Name = "tabG33";
        this.tabG33.Padding = new System.Windows.Forms.Padding(3);
        this.tabG33.Size = new System.Drawing.Size(274, 279);
        this.tabG33.TabIndex = 3;
        this.tabG33.Text = "G33";
        this.tabG33.UseVisualStyleBackColor = true;
        // 
        // lstG33
        // 
        this.lstG33.FormattingEnabled = true;
        this.lstG33.Location = new System.Drawing.Point(8, 7);
        this.lstG33.Name = "lstG33";
        this.lstG33.Size = new System.Drawing.Size(259, 264);
        this.lstG33.TabIndex = 1;
        // 
        // tabG34
        // 
        this.tabG34.Controls.Add(this.lstG34);
        this.tabG34.Location = new System.Drawing.Point(4, 22);
        this.tabG34.Name = "tabG34";
        this.tabG34.Padding = new System.Windows.Forms.Padding(3);
        this.tabG34.Size = new System.Drawing.Size(274, 279);
        this.tabG34.TabIndex = 4;
        this.tabG34.Text = "G34";
        this.tabG34.UseVisualStyleBackColor = true;
        // 
        // lstG34
        // 
        this.lstG34.FormattingEnabled = true;
        this.lstG34.Location = new System.Drawing.Point(8, 7);
        this.lstG34.Name = "lstG34";
        this.lstG34.Size = new System.Drawing.Size(259, 264);
        this.lstG34.TabIndex = 1;
        // 
        // tabG35
        // 
        this.tabG35.Controls.Add(this.lstG35);
        this.tabG35.Location = new System.Drawing.Point(4, 22);
        this.tabG35.Name = "tabG35";
        this.tabG35.Padding = new System.Windows.Forms.Padding(3);
        this.tabG35.Size = new System.Drawing.Size(274, 279);
        this.tabG35.TabIndex = 5;
        this.tabG35.Text = "G35";
        this.tabG35.UseVisualStyleBackColor = true;
        // 
        // lstG35
        // 
        this.lstG35.FormattingEnabled = true;
        this.lstG35.Location = new System.Drawing.Point(8, 7);
        this.lstG35.Name = "lstG35";
        this.lstG35.Size = new System.Drawing.Size(259, 264);
        this.lstG35.TabIndex = 1;
        // 
        // tabG36
        // 
        this.tabG36.Controls.Add(this.lstG36);
        this.tabG36.Location = new System.Drawing.Point(4, 22);
        this.tabG36.Name = "tabG36";
        this.tabG36.Padding = new System.Windows.Forms.Padding(3);
        this.tabG36.Size = new System.Drawing.Size(274, 279);
        this.tabG36.TabIndex = 6;
        this.tabG36.Text = "G36";
        this.tabG36.UseVisualStyleBackColor = true;
        // 
        // lstG36
        // 
        this.lstG36.FormattingEnabled = true;
        this.lstG36.Location = new System.Drawing.Point(8, 7);
        this.lstG36.Name = "lstG36";
        this.lstG36.Size = new System.Drawing.Size(259, 264);
        this.lstG36.TabIndex = 1;
        // 
        // tabG37
        // 
        this.tabG37.Controls.Add(this.lstG37);
        this.tabG37.Location = new System.Drawing.Point(4, 22);
        this.tabG37.Name = "tabG37";
        this.tabG37.Padding = new System.Windows.Forms.Padding(3);
        this.tabG37.Size = new System.Drawing.Size(274, 279);
        this.tabG37.TabIndex = 7;
        this.tabG37.Text = "G37";
        this.tabG37.UseVisualStyleBackColor = true;
        // 
        // lstG37
        // 
        this.lstG37.FormattingEnabled = true;
        this.lstG37.Location = new System.Drawing.Point(8, 7);
        this.lstG37.Name = "lstG37";
        this.lstG37.Size = new System.Drawing.Size(259, 264);
        this.lstG37.TabIndex = 1;
        // 
        // tabG38
        // 
        this.tabG38.Controls.Add(this.lstG38);
        this.tabG38.Location = new System.Drawing.Point(4, 22);
        this.tabG38.Name = "tabG38";
        this.tabG38.Padding = new System.Windows.Forms.Padding(3);
        this.tabG38.Size = new System.Drawing.Size(274, 279);
        this.tabG38.TabIndex = 8;
        this.tabG38.Text = "G38";
        this.tabG38.UseVisualStyleBackColor = true;
        // 
        // lstG38
        // 
        this.lstG38.FormattingEnabled = true;
        this.lstG38.Location = new System.Drawing.Point(8, 7);
        this.lstG38.Name = "lstG38";
        this.lstG38.Size = new System.Drawing.Size(259, 264);
        this.lstG38.TabIndex = 1;
        // 
        // tabG39
        // 
        this.tabG39.Controls.Add(this.lstG39);
        this.tabG39.Location = new System.Drawing.Point(4, 22);
        this.tabG39.Name = "tabG39";
        this.tabG39.Padding = new System.Windows.Forms.Padding(3);
        this.tabG39.Size = new System.Drawing.Size(274, 279);
        this.tabG39.TabIndex = 9;
        this.tabG39.Text = "G39";
        this.tabG39.UseVisualStyleBackColor = true;
        // 
        // lstG39
        // 
        this.lstG39.FormattingEnabled = true;
        this.lstG39.Location = new System.Drawing.Point(8, 7);
        this.lstG39.Name = "lstG39";
        this.lstG39.Size = new System.Drawing.Size(259, 264);
        this.lstG39.TabIndex = 1;
        // 
        // tabSearch
        // 
        this.tabSearch.Controls.Add(this.btnSearch);
        this.tabSearch.Controls.Add(this.txtSearch);
        this.tabSearch.Controls.Add(this.lstResult);
        this.tabSearch.Location = new System.Drawing.Point(4, 22);
        this.tabSearch.Name = "tabSearch";
        this.tabSearch.Padding = new System.Windows.Forms.Padding(3);
        this.tabSearch.Size = new System.Drawing.Size(274, 279);
        this.tabSearch.TabIndex = 10;
        this.tabSearch.Text = "Search";
        this.tabSearch.UseVisualStyleBackColor = true;
        // 
        // btnSearch
        // 
        this.btnSearch.Location = new System.Drawing.Point(150, 47);
        this.btnSearch.Name = "btnSearch";
        this.btnSearch.Size = new System.Drawing.Size(75, 19);
        this.btnSearch.TabIndex = 3;
        this.btnSearch.Text = "Search";
        this.btnSearch.UseVisualStyleBackColor = true;
        // 
        // txtSearch
        // 
        this.txtSearch.Location = new System.Drawing.Point(8, 46);
        this.txtSearch.Name = "txtSearch";
        this.txtSearch.Size = new System.Drawing.Size(136, 20);
        this.txtSearch.TabIndex = 2;
        // 
        // lstResult
        // 
        this.lstResult.FormattingEnabled = true;
        this.lstResult.Location = new System.Drawing.Point(8, 72);
        this.lstResult.Name = "lstResult";
        this.lstResult.Size = new System.Drawing.Size(259, 199);
        this.lstResult.TabIndex = 1;
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
        this.label1.Location = new System.Drawing.Point(13, 13);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(131, 20);
        this.label1.TabIndex = 1;
        this.label1.Text = "Select Subsector";
        // 
        // grpOptions
        // 
        this.grpOptions.Controls.Add(this.rbtnHighest);
        this.grpOptions.Controls.Add(this.rbtnCoord);
        this.grpOptions.Location = new System.Drawing.Point(301, 68);
        this.grpOptions.Name = "grpOptions";
        this.grpOptions.Size = new System.Drawing.Size(101, 72);
        this.grpOptions.TabIndex = 2;
        this.grpOptions.TabStop = false;
        this.grpOptions.Text = "Sort by";
        // 
        // rbtnHighest
        // 
        this.rbtnHighest.AutoSize = true;
        this.rbtnHighest.Location = new System.Drawing.Point(7, 44);
        this.rbtnHighest.Name = "rbtnHighest";
        this.rbtnHighest.Size = new System.Drawing.Size(90, 17);
        this.rbtnHighest.TabIndex = 1;
        this.rbtnHighest.Text = "Highest Level";
        this.rbtnHighest.UseVisualStyleBackColor = true;
        this.rbtnHighest.CheckedChanged += new System.EventHandler(this.rbtnHighest_CheckedChanged);
        // 
        // rbtnCoord
        // 
        this.rbtnCoord.AutoSize = true;
        this.rbtnCoord.Checked = true;
        this.rbtnCoord.Location = new System.Drawing.Point(7, 20);
        this.rbtnCoord.Name = "rbtnCoord";
        this.rbtnCoord.Size = new System.Drawing.Size(84, 17);
        this.rbtnCoord.TabIndex = 0;
        this.rbtnCoord.TabStop = true;
        this.rbtnCoord.Text = "Co-ordinates";
        this.rbtnCoord.UseVisualStyleBackColor = true;
        this.rbtnCoord.CheckedChanged += new System.EventHandler(this.rbtnCoord_CheckedChanged);
        // 
        // ViewForm
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(408, 356);
        this.Controls.Add(this.grpOptions);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.tabconSubsectors);
        this.MaximizeBox = false;
        this.Name = "ViewForm";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "View Jumpgates - JNP";
        this.Load += new System.EventHandler(this.ViewForm_Load);
        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ViewForm_FormClosing);
        this.tabconSubsectors.ResumeLayout(false);
        this.tabG30.ResumeLayout(false);
        this.tabG31.ResumeLayout(false);
        this.tabG32.ResumeLayout(false);
        this.tabG33.ResumeLayout(false);
        this.tabG34.ResumeLayout(false);
        this.tabG35.ResumeLayout(false);
        this.tabG36.ResumeLayout(false);
        this.tabG37.ResumeLayout(false);
        this.tabG38.ResumeLayout(false);
        this.tabG39.ResumeLayout(false);
        this.tabSearch.ResumeLayout(false);
        this.tabSearch.PerformLayout();
        this.grpOptions.ResumeLayout(false);
        this.grpOptions.PerformLayout();
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.TabControl tabconSubsectors;
    private System.Windows.Forms.TabPage tabG30;
    private System.Windows.Forms.TabPage tabG31;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.TabPage tabG32;
    private System.Windows.Forms.TabPage tabG33;
    private System.Windows.Forms.TabPage tabG34;
    private System.Windows.Forms.TabPage tabG35;
    private System.Windows.Forms.TabPage tabG36;
    private System.Windows.Forms.TabPage tabG37;
    private System.Windows.Forms.TabPage tabG38;
    private System.Windows.Forms.TabPage tabG39;
    private System.Windows.Forms.TabPage tabSearch;
    private System.Windows.Forms.CustomListBox lstG30;
    private System.Windows.Forms.GroupBox grpOptions;
    private System.Windows.Forms.RadioButton rbtnHighest;
    private System.Windows.Forms.RadioButton rbtnCoord;
    private System.Windows.Forms.CustomListBox lstG31;
    private System.Windows.Forms.CustomListBox lstG32;
    private System.Windows.Forms.CustomListBox lstG33;
    private System.Windows.Forms.CustomListBox lstG34;
    private System.Windows.Forms.CustomListBox lstG35;
    private System.Windows.Forms.CustomListBox lstG36;
    private System.Windows.Forms.CustomListBox lstG37;
    private System.Windows.Forms.CustomListBox lstG38;
    private System.Windows.Forms.CustomListBox lstG39;
    private System.Windows.Forms.Button btnSearch;
    private System.Windows.Forms.TextBox txtSearch;
    private System.Windows.Forms.ListBox lstResult;
}

}

+2  A: 

The first algorithm is the same as alphabetic ordering, so you can use directly:

int res = string.Compare(first,second);

The second algorithm is descending alphabetic ordering of the last two chars:

int res = -string.Compare(first.Substring(first.Length - 2, 2), second.Substring(first.Length - 2, 2));

To sort the list you have two options; the first is to create your own ListBox subclass and override the Sort method as detailed on the MSDN page for ListBox.Sort Method.

The second (easier and uglier) is to put all the items in a collection, order the collection and replace the items in the list, something like this:

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

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {

        void SortListBox() {
            List<string> items = new List<string>();
            foreach (string value in listBox1.Items) {
                items.Add(value);
            }
            items.Sort((first, second) => string.Compare(first, second));
            listBox1.Items.Clear();
            listBox1.Items.AddRange(items.ToArray());
        }

    }
}

Hope this helps...

Paolo Tedesco
what did you use for res, first and second?
Arcadian
well, first and second are two stings like "G35:45:20:41 JG01" and "G35:45:58:11 JG07"... what do you mean with 'what did you use for res'?
Paolo Tedesco
I assumed you needed help with the algorithm only, and not with the actual lists ordering... is this the case?
Paolo Tedesco
i'm new to C#, i should have put that in the question. i assumed that the list ordering would be part of the algorithm...
Arcadian
-1 this doesn't help at all. How does this deal with breaking down the item string into it's specific parts and sorting based on the suffix, then the next int, then the next int, etc, as the OP asked?
GenericTypeTea
@GenericTypeTea: isn't that the same as sorting alphabetically?
Paolo Tedesco
@Paolo - Ah, bugger.
GenericTypeTea
@GenericTypeTea: :)
Paolo Tedesco
@Paolo - Trust me to over-engineer it. Massively simplified my answer now.
GenericTypeTea
A: 

To change the sorting behaviour of a ListBox, you must implement your own ListBox class. I've written the solution for you and tested it.

Right click on your project, select "Add Class..." and enter the class name "CustomListBox". Add the following code into the class between the namespaces:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;  // You need this namespace for ListBox

public class CustomListBox : ListBox
{
    public CustomListBox()
        : base()
    {
    }

    protected override void Sort()
    {
        if (this.Items.Count > 1)
        {
            bool swapped;
            do
            {

                int counter = this.Items.Count - 1;
                swapped = false;

                while (counter > 0)
                {
                    if (this.Items[counter].ToString().CompareTo(
                        this.Items[counter - 1].ToString()) == -1)
                    {
                        object temp = Items[counter];
                        this.Items[counter] = this.Items[counter - 1];
                        this.Items[counter - 1] = temp;
                        swapped = true;
                    }

                    counter -= 1;

                }

            }
            while (swapped);
        }
    }
}

All you need to do with your sorting is to sort alphabetically. As per my example above, you can just use the CompareTo method to determine which string comes before or after another string.

Now you've got your own custom ListBox, you can add additional properties and fields to it:

public class CustomListBox : ListBox
{
    public bool SortByJG;

    // Other code...
}

Then you can change the sort method to change the search based on the current sort mode as follows:

while (counter > 0)
{
    bool swap;
    if (this.SortByJG)
    {
        string[] breakDownCurrent = this.Items[counter].ToString().Split(' ');
        string[] breakDownPrevious = this.Items[counter - 1].ToString().Split(' ');
        if (breakDownCurrent[1].CompareTo(breakDownPrevious[1]) == -1)
        {
            swap = true;
        }
    }
    else
    {
        if (this.Items[counter].ToString().CompareTo(
            this.Items[counter - 1].ToString()) == -1)
        {
            swap = true;
        }
    }

    if (swap)
    {
        object temp = Items[counter];
        this.Items[counter] = this.Items[counter - 1];
        this.Items[counter - 1] = temp;
        swapped = true;
    }

    counter -= 1;

}

To make the sorting work, set Sorted = true; on the ListBox.

UPDATE: Because the OP is struggling to understand, here's the entire class:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;  // You need this namespace for ListBox

namespace WindowsApplication1
{

    public class CustomListBox : ListBox
    {

        public CustomListBox()
            : base()
        {
        }

        public bool SortByJG;

        protected override void Sort()
        {

            if (this.Items.Count > 1)
            {
                bool swapped;
                do
                {

                    int counter = this.Items.Count - 1;
                    swapped = false;

                    while (counter > 0)
                    {
                        bool swap = false;
                        if (this.SortByJG)
                        {
                            string[] breakDownCurrent = this.Items[counter].ToString().Split(' ');
                            string[] breakDownPrevious = this.Items[counter - 1].ToString().Split(' ');
                            if (breakDownCurrent[1].CompareTo(breakDownPrevious[1]) == -1)
                            {
                                swap = true;
                            }
                        }
                        else
                        {
                            if (this.Items[counter].ToString().CompareTo(
                                this.Items[counter - 1].ToString()) == -1)
                            {
                                swap = true;
                            }
                        }

                        if (swap)
                        {
                            object temp = Items[counter];
                            this.Items[counter] = this.Items[counter - 1];
                            this.Items[counter - 1] = temp;
                            swapped = true;
                        }

                        counter -= 1;

                    }


                }
                while (swapped);
            }
        }
    }
}

You could now also add your own method to sort with the specified mode:

public void Sort(bool sortByJG)
{
   this.SortByJG = sortByJG;
   if (this.Sorted)
   {
      this.Sort();
   }
   else
   {
      this.Sorted = true;
   }
}
GenericTypeTea
right so its lstG30.Sorted = true; to get the regular sorting. and to sort by JG you have first call that method.
Arcadian
No... if you implement the public void Sort(bool sortByJG) method I proposed then you can say list.Sort(true); for JG sorting and list.Sort(false) for standard sorting. That way you can use the same method for both types of sorting.
GenericTypeTea
and your sure that its ok for the JG method to be called "public void Sort(bool sortByJG)" as well as the regular sorting being called "protected override void Sort()" wouldn't that be a naming conflict as they are both called "Sort"
Arcadian
No. It's perfectly acceptable. It's a very basic aspect of the language. As long as the methods have different overloads you can have the same name.
GenericTypeTea
i didn't know that. well i tried lstG30.Sort(true); and it says that "'System.Windows.Forms.ListBox.Sort()' is inaccessible due to its protection level"
Arcadian
GenericTypeTea
I can't find any. i'll post what i have above so you can see whats going on.
Arcadian
Like I said. You need to look in your .DESIGNER.CS file. I.e. ViewForm.Designer.cs. NOT ViewForm.cs.
GenericTypeTea
posted it. ListBox appears at the top and at the bottom. if i change ones at the top i get "does not exist in context" if i change the ones at the bottom as i have done in the post i get a build error "does not exist in namespace windows.forms"
Arcadian
Do a find and replace on "System.Windows.Forms.ListBox" with "Jumpgate_Network_Program.CustomListBox" only on that particular file. This is assuming your CustomListBox class is in the "Jumpgate_Network_Program" namespace.
GenericTypeTea
This is all really basic and fundamental stuff you're asking. I suggest having a read through all these tutorials: http://www.csharp-station.com/Tutorials.aspx. Lesson 6 is about name spaces which will explain my last comment.
GenericTypeTea
will do. I guess it's easier if you have been doing it for 10 years. Ok thats good. It sorts them properly now. just need to reverse the order of the JG sorting. at the moment it places the lowest at the top and the highest at the bottom.
Arcadian
GenericTypeTea
Yh i will thanks. Only started learning about this a few days ago. and everything i know about it either comes from guides off the web, people like you from stack overflow and what i can learn from bookmarking the code and stepping through it slowly.
Arcadian
Do you mean breakpointing? Heh. Well, best of luck to you! Hope you enjoy it as much as the rest of us.
GenericTypeTea