Implementing simple sorting (Ascending/Descending) for a DataGridView Column.

The DataGridView does not provide any internal funtionality for sorting a column by clicking on the header. So here is a simple example to implement it.
Create a WindowsFormApplication in Visual Studio. Add a new form and add a DataGridView to it.

Now apply the following code to the Form1.cs.

public partial class Form1 : Form
{
int cntr = 0; //used for custom sort toggle
DataTable dt; // used as datasource of DataGridView
/// <summary>
/// Form1 Constructor that calls the intialize component and other custom initalization code
/// </summary>
public Form1()
{
InitializeComponent();
//
// dataGridView1
//
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Location = new System.Drawing.Point(13, 13);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(405, 290);
this.dataGridView1.TabIndex = 0;

//Add the column header mouse cilck event handler

this.dataGridView1.ColumnHeaderMouseClick += new
System.Windows.Forms.
DataGridViewCellMouseEventHandler
(dataGridView1_ColumnHeaderMouseClick);

// Creating the custom datatable for binding
dt = new DataTable();
dt.Columns.Add(
new DataColumn("ID", System.Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("token_no", System.Type.GetType("System.String")));

// Adding data to datatable
DataRow dr = dt.NewRow();
dr[
"ID"] = 1;
dr[
"token_no"] = "Amit";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[
"ID"] = 2;
dr[
"token_no"] = "Ajit";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[
"ID"] = 3;
dr[
"token_no"] = "Rahul";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[
"ID"] = 4;
dr[
"token_no"] = "Sanjay";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[
"ID"] = 5;
dr[
"token_no"] = "Zuber";
dt.Rows.Add(dr);
dt.AcceptChanges();
}

private void Form1_Load(object sender, EventArgs e)
{

//Bind the datagridview with datatable
dataGridView1.DataSource = dt;
}

/// <summary>
/// Header click event handler that perform the sorting on DataGridView
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (cntr % 2 == 0) //This condition applied for toggeling the Ascending and Descending sort
dataGridView1.Sort(dataGridView1.Columns[e.ColumnIndex], ListSortDirection.Ascending);
else
dataGridView1.Sort(dataGridView1.Columns[e.ColumnIndex], ListSortDirection.Descending);
cntr++;
}
}

Hope this article will help some developers dealing with DataGridView.

Cheers!!