Sorting Data in a GridView Web Server Control
Thecontrol provides built-in sorting functionality without requiring any coding. You can further customize the sort functionality of the GridView control by using custom property values for columns as well as by using the and events.
How Sorting Works in the GridView Control
The GridView control does not perform its own sorting of columns, but rather relies on the data source control to perform sorting on its behalf. The control provides the user interface (UI) for sorting, such ascontrols displayed at the top of each column of the grid. However, the GridView control relies on the data-sorting capabilities of the data source control to which it is bound.
If the bound data source control can sort data, then the GridView control can interact with the data source control and request sorted data by passing a SortExpression to the data source when data is selected. Not all data source controls support sorting; for example, thecontrol does not. If the data source control supports sorting, however, the GridView can take advantage of it. The following list describes data source controls and the configuration that is needed to support sorting:
Theand controls can sort if the property is set to , or the property is set to either DataSet or DataReader.
Thecontrol can sort if its property is set to a value supported by the underlying object.
GridView Sorting Process
You can enable the default sorting behavior in the GridView control by setting itsproperty to true. Setting this property to true causes the GridView control to render a LinkButton control in the column headers. The control also implicitly sets the SortExpression property of each column to the name of the data field to which it is bound. For example, if the grid contains a column that displays the City column of the Employees table in the Northwind sample database, the SortExpression property of that column will be set to City.
At run time, users can click the LinkButton control in a column heading to sort by that column. Clicking the link causes the page to perform a postback and raises the GridView control's Sorting event. The sort expression — by default, the name of the data column — is passed as part of the event arguments. The default behavior for the Sorting event is that the GridView control passes the sort expression to the data source control. The data source control executes its selection query or method, including the sort parameters passed by the grid.
After the query has executed, the grid's Sorted event is raised. This event allows you to perform post-query logic, such as displaying a status message. Finally, the data source control rebinds the GridView control to the results of the resorted query.
The GridView control does not check whether the data source control supports sorting; it always passes the sort expression to the data source. If the data source control does not support sorting and a sorting operation is performed in the GridView control, the GridView control throws theexception. You can catch this exception in a handler for the Sorting event and check the data source to determine whether sorting is supported, or by using your own sorting logic.
Controlling Sorting for Individual Columns
Setting the grid's AllowSorting property allows you to sort columns by default. You can disable sorting for individual fields (theor field) by setting the SortExpression property of the individual column to an empty string ("").
If the default sort behavior is not adequate for your requirements, you can customize the grid's sorting behavior. The basic technique for custom sorting is to handle the Sorting event. In the handler, you can do the following:
Customize the sort expression that is passed to the data source control. By default, the sort expression is the name of a single column. You can modify the sort expression in the handler. For example, if you want to sort by two columns, you can create a sort expression that includes both. You can then pass the modified sort expression to the data source control. For more information, see the SortExpression property.
Create your own sorting logic. For example, if you are working with a data source that does not support sorting, you can perform the sort in your own code and then bind the grid to the sorted data.