Introduction
Sorting means arranging your data either in ascending order or descending order. But, why we do perform sorting between data? The answer is to increase the speed of readability. So, we need sorted data. Various types of sorting Technique is available like merge sort, quick sort, bubble sort, selection sort, insertion sort and etc. Here, I perform sorting in the GridView. Actually this control provide built in sorting functionality so no code is required for it. But, I will give you example of sorting by using code behind file. Sorting and sorted event of this control provide you to customize the sort functionality like you can use either ViewState or other technique. First of all I would like to talk about inbuilt functionality which is provide by this control. Let see the example
Step-1 : Create a DataBase table in Visual StudioStep-2 : Bind GridView with SqlDataSource control
Step-3 : Select 'Enable Sorting' CheckBox for sorting.
Code generate the following output
Complete Source Code with AllowSorting="True" property
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="sno" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="sno" HeaderText="sno" ReadOnly="True"
SortExpression="sno" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Address" HeaderText="Address"
SortExpression="Address" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [userdata]"></asp:SqlDataSource>
</div>
</form>
</body>
</html>
If you bind the GridView control with the SqlDataSource. GridView provide functionality to sort the column without any coding. With the help of allowSorting property of this control you can make column as linkButon, i mean to say LinkButton controls displayed at the top of each column of the grid lets see the output of the above mentioned program. Now to the second part that is sorting through code behind file:
If you bind the GridView control with the SqlDataSource. GridView provide functionality to sort the column without any coding. With the help of allowSorting property of this control you can make column as linkButon, i mean to say LinkButton controls displayed at the top of each column of the grid lets see the output of the above mentioned program. Now to the second part that is sorting through code behind file:
II Method (Sorting through Code Behind file)
Here, i will use ViewState, SortDirection and SortExpression for sorting. With the help of SortDirection enumeration we can retrieve sort order of the column. Also access the last state information of Post Back event by using ViewState. Let see the example- First to add the GridView control to the design page.
- Bind this control with the DataTable.
- Copy this code and paste into your code behind file
private void bindgridview()
{
var data = getDataTable();
GridView1.DataSource = data;
GridView1.DataBind();
}
private DataTable getDataTable()
{
SqlConnection con = new SqlConnection();
con.ConnectionString=ConfigurationManager.ConnectionStrings["btti"].ToString();
con.Open();
SqlCommand cmd=new SqlCommand();
cmd.CommandText = "select * from [register]";
cmd.Connection=con;
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
- Now, perform Customization in the sorting by using GridView_Sorting event.
- Copy this code in the same code behind file.
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExp = e.SortExpression;
string direction = string.Empty;
if(SortDir==SortDirection.Ascending)
{
SortDir = SortDirection.Descending;
direction = "DESC";
}
else
{
SortDir = SortDirection.Ascending;
direction = "ASC";
}
DataTable dt = getDataTable();
dt.DefaultView.Sort = sortExp +" " + direction;
GridView1.DataSource = dt;
GridView1.DataBind();
}
public SortDirection SortDir
{
get {
if(ViewState["SortDir"]==null)
{
ViewState["SortDir"] = SortDirection.Ascending;
}
return (SortDirection)ViewState["SortDir"];
}
set {
ViewState["SortDir"] = value;
}
}
Here, SortDir is the public property through this we can access ViewState Information. When first time page is loaded ViewState contain null value so the sorted order is default ascending. So, SortDir key of it contain Descending order with the DESC string direction. When we click on any link button which is mentioned with the table column it rearrange the column according to SortExpression (table Column) and Direction.