Introduction
Many developers who try to sort a GridView
generally use the ViewState
for maintaining the last position of the GridView
. Here, I want to show you a new technique of doing this...
Here is my GridView
code:
<asp:GridView ID="GridView1"
runat="server" AllowSorting="true"
AutoGenerateColumns="False" onsorting="GridView1_Sorting"
CurrentSortField="employeeid" CurrentSortDirection="ASC"
onrowcreated="GridView1_RowCreated" AllowPaging="true"
CaptionAlign="Bottom" onpageindexchanging="GridView1_PageIndexChanging"
onprerender="GridView1_PreRender"
PageSize="2">
<Columns>
<asp:BoundField DataField="EmployeeId" HeaderText="Last Name"
ItemStyle-Width="15%" SortExpression="EmployeeId" >
<ItemStyle Width="15%"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="Name"
HeaderText="First Name" ItemStyle-Width="15%"
SortExpression="Name" >
<ItemStyle Width="15%"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="gender"
HeaderText="Email" ItemStyle-Width="15%" >
<ItemStyle Width="15%"></ItemStyle>
</asp:BoundField>
<asp:TemplateField HeaderText="Change Password"
ItemStyle-Width="15%">
<ItemTemplate>
<asp:LinkButton ID="imgbtn1"
runat="server">change password</asp:LinkButton>
</ItemTemplate>
<ItemStyle Width="15%"></ItemStyle>
</asp:TemplateField>
<asp:BoundField DataField="city"
HeaderText="Date created" ItemStyle-Width="15%">
<ItemStyle Width="15%"></ItemStyle>
</asp:BoundField>
</Columns>
<PagerSettings Mode="NextPreviousFirstLast" />
</asp:GridView>
And I sort using the attribute
property of the GridView
.
See here, through attribute, I am maintaining last sorted record. Suppose last I sort asc
then asc
and if I last sorted desc
then desc
. This is how it works:
private void GridView1_Sorting (GridView gridview, GridViewSortEventArgs e,
out SortDirection sortDirection, out string sortField)
{
sortField = e.SortExpression;
sortDirection = e.SortDirection;
if (gridview.Attributes["CurrentSortField"] != null &&
gridview.Attributes["CurrentSortDirection"] != null)
{
if (sortField == gridview.Attributes["CurrentSortField"])
{
if (gridview.Attributes["CurrentSortDirection"] == "ASC")
{
sortDirection = SortDirection.Descending;
}
else
{
sortDirection = SortDirection.Ascending;
}
}
gridview.Attributes["CurrentSortField"] = sortField;
gridview.Attributes["CurrentSortDirection"] =
(sortDirection == SortDirection.Ascending ? "ASC" : "DESC");
}
}
Now you will get the last sorted and filed easily and it generally shows that while developing, there is too much load on the page using the viewstate
.
Code Description
In sorting, you have two options asc
/desc
.
Now, if you are sorting by asc
, then in gridview
attribute add to CurrentSortDirection= asc
.
When user clicks for the second time, we get value from CurrentSortDirection asc
so now do desc
and add CurrentSortDirection =desc
.
Simple, but very useful.
I am sure this will definitely help you. If you still did not get it, take a look at the source code.