Bidirectional Sorting on Any Column in DataGrid
page 2 of 3
by Pani Baruri & Abhijit Mandrekar
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 21847/ 72

Part 1: Using SortExpression Property

Design Time:


  1. Drag and drop a DataGrid on the form.
  2. Set AllowSorting property of the grid to True.
  3. Set AutogenerateColumns property of the grid to False.
  4. Add bound columns to datagrid and set their properties as follows. The sortexpression property refers to the name of column in database table.


Note: Employees table from Northwind database is being used to illustrate the purpose.



Header Text

Sort Expression


Employee ID

EmployeeID ASC


Last Name

LastName ASC


First Name

FirstName ASC



Title ASC



City ASC



Country ASC





Pseudo logic:


  1. Trap sortcommand event of the datagrid control.


  1. Read sortexpression property of the event argument.


  1. Sort data in grid using current sort expression.


  1. Use split function to separate column name (which represents database field name) and sort direction. The first element of an array contains database field name.


  1. If sort direction is ASC then new sort direction is DESC and vice versa. Save the new direction into 2nd element of the array.


  1. Loop through all columns

            If column’s sort expression matches sort expression returned from event argument then

                        Concatenate first element of an array, space and second element of an array to

build a new sort expression.

                        Assign new sort expression to current column’s sortexpression property.

                        Exit loop

            End If

End Loop


Note: In order for this example to work properly write binding SQL query with order by clause with no mention of column names. The column names are appended at run-time to the binding SQL query.


VB.Net Code:


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Put user code to initialize the page here

        If Not Page.IsPostBack Then

            BindDataGrid("EmployeeID ASC")

        End If

    End Sub


    Private Sub BindDataGrid(ByVal strSortField As String)

        Dim cn As SqlConnection

        Dim cmdSelect As SqlCommand


        cn = New SqlConnection("Server=localhost;UID=sa;PWD=;Database=Northwind")

        cmdSelect = New SqlCommand("Select * From employees Order By " & strSortField, cn)


        DataGrid1.DataSource = cmdSelect.ExecuteReader()




    End Sub




    Private Sub DataGrid1_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DataGrid1.SortCommand

        Dim arrSortExpr() As String

        Dim i As Integer


        If e.SortExpression = "" Then Return




        arrSortExpr = Split(e.SortExpression, " ")

        For i = 0 To DataGrid1.Columns().Count - 1

            If (DataGrid1.Columns(i).SortExpression = e.SortExpression) Then

                If UCase(arrSortExpr(1)) = "ASC" Then

                    arrSortExpr(1) = "DESC"

                ElseIf UCase(arrSortExpr(1)) = "DESC" Then

                    arrSortExpr(1) = "ASC"

                End If


                DataGrid1.Columns(i).SortExpression = arrSortExpr(0) & " " & arrSortExpr(1)

                Exit For

            End If


    End Sub

View Entire Article

User Comments

Title: Not bad but, not what I want.   
Name: AK
Date: 2007-08-02 1:34:42 AM
I want sorting and paging in a grid view in 2.0 which is dynamically binded i.e. some times it has 3 columns or some time 4, 5, 6 or more columns.
Please suggest possible solution.

Thanks in advance,
Title: Mr   
Name: John
Date: 2007-01-24 9:27:50 AM
Thanx a lot if its not i never be saved
Title: great   
Name: mohsin
Date: 2006-10-18 5:52:20 AM
Thats a great solution,very comprehensive and easy to understand and ...
Title: mr   
Name: rutts
Date: 2006-09-29 6:53:38 AM
code is much helpful to solve my doubt regarding dataview
Title: Ms   
Name: Renee
Date: 2006-04-20 7:49:38 PM
Thank you, this is awesome. Easy to follow and nice solution.
Title: Mr   
Name: Arif
Date: 2006-01-12 4:18:59 AM
Thank you very much for your help. This ia a great article which works straight out of the box.

Product Spotlight
Product Spotlight 

Community Advice: ASP | SQL | XML | Regular Expressions | Windows

©Copyright 1998-2020  |  Page Processed at 2020-02-26 4:00:19 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search