Windows Form Application DataGridView Operations


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!!