GridView.Sorting Event
Occurs when the hyperlink to sort a column is clicked, but before the GridView control handles the sort operation.
Assembly: System.Web (in System.Web.dll)
The Sorting event is raised when the hyperlink to sort a column is clicked, but before the GridView control handles the sort operation. This enables you to provide an event-handling method that performs a custom routine, such as canceling the sorting operation, whenever this event occurs.
A GridViewSortEventArgs object is passed to the event-handling method, which enables you to determine the sort expression for the column and to indicate that the selection operation should be canceled. To cancel the selection operation, set the Cancel property of the GridViewSortEventArgs object to true.
For information about how to programmatically initiate a sort operation, see the Sort method.
For more information about handling events, see NIB: Consuming Events.
The following example demonstrates how to use the Sorting event to perform the sorting functionality when the GridView control is bound to a DataTable object by setting the DataSource property programmatically.
<%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub TaskGridView_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs) 'Retrieve the table from the session object. Dim dt = TryCast(Session("TaskTable"), DataTable) If dt IsNot Nothing Then 'Sort the data. dt.DefaultView.Sort = e.SortExpression & " " & GetSortDirection(e.SortExpression) TaskGridView.DataSource = Session("TaskTable") TaskGridView.DataBind() End If End Sub Private Function GetSortDirection(ByVal column As String) As String ' By default, set the sort direction to ascending. Dim sortDirection = "ASC" ' Retrieve the last column that was sorted. Dim sortExpression = TryCast(ViewState("SortExpression"), String) If sortExpression IsNot Nothing Then ' Check if the same column is being sorted. ' Otherwise, the default value can be returned. If sortExpression = column Then Dim lastDirection = TryCast(ViewState("SortDirection"), String) If lastDirection IsNot Nothing _ AndAlso lastDirection = "ASC" Then sortDirection = "DESC" End If End If End If ' Save new values in ViewState. ViewState("SortDirection") = sortDirection ViewState("SortExpression") = column Return sortDirection End Function Protected Sub Page_Load() If Not Page.IsPostBack Then ' Create a new table. Dim taskTable As New DataTable("TaskList") ' Create the columns. taskTable.Columns.Add("Id", GetType(Integer)) taskTable.Columns.Add("Description", GetType(String)) 'Add data to the new table. For i = 0 To 9 Dim tableRow As DataRow = taskTable.NewRow() tableRow("Id") = i tableRow("Description") = "Task " & (10 - i) taskTable.Rows.Add(tableRow) Next i 'Persist the table in the Session object. Session("TaskTable") = taskTable 'Bind the GridView control to the data source. TaskGridView.DataSource = Session("TaskTable") TaskGridView.DataBind() End If End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Sorting example</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="TaskGridView" runat="server" AllowSorting="true" OnSorting="TaskGridView_Sorting" > </asp:GridView> </div> </form> </body> </html>
The following example demonstrates how to use the Sorting event to cancel a sorting operation.
<%@ Page language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Sub CustomersGridView_Sorting(sender As Object, e As GridViewSortEventArgs) ' Cancel the sorting operation if the user attempts ' to sort by address. If e.SortExpression = "Address" Then e.Cancel = True Message.Text = "You cannot sort by address." SortInformationLabel.Text = "" Else Message.Text = "" End If End Sub Sub CustomersGridView_Sorted(ByVal sender As Object, ByVal e As EventArgs) ' Display the sort expression and sort direction. SortInformationLabel.Text = "Sorting by " & _ CustomersGridView.SortExpression.ToString() & _ " in " & CustomersGridView.SortDirection.ToString() & _ " order." End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>GridView Sorted and Sorting Example</title> </head> <body> <form id="form1" runat="server"> <h3>GridView Sorted and Sorting Example</h3> <asp:label id="Message" forecolor="Red" runat="server"/> <br/> <asp:label id="SortInformationLabel" forecolor="Navy" runat="server"/> <br/> <asp:gridview id="CustomersGridView" datasourceid="CustomersSource" autogeneratecolumns="true" allowpaging="true" emptydatatext="No data available." allowsorting="true" onsorting="CustomersGridView_Sorting" onsorted="CustomersGridView_Sorted" runat="server"> </asp:gridview> <!-- This example uses Microsoft SQL Server and connects --> <!-- to the Northwind sample database. Use an ASP.NET --> <!-- expression to retrieve the connection string value --> <!-- from the Web.config file. --> <asp:sqldatasource id="CustomersSource" selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]" connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>" runat="server"/> </form> </body> </html>
Available since 2.0