<asp:GridView ID="grdManageUsers" runat="server" AutoGenerateColumns="False" OnRowCommand="grdManageUsers_RowCommand">
<Columns>
<asp:TemplateField HeaderText="First Name">
<HeaderTemplate>
<asp:LinkButton ID="lnkFirstname" runat="server" CommandName="Sort" CommandArgument="Firstname">First Name</asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblFirstNameEdit" runat="server" Text='<%# Eval("Firstname")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtFirstname" runat="Server" Text='<%# Eval("Firstname") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Name">
<HeaderTemplate>
<asp:LinkButton ID="lnklastname" runat="server" CommandName="Sort" CommandArgument="Lastname">Last Name</asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblLastnameEdit" runat="server" Text='<%# Eval("Lastname")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtLastname" runat="Server" Text='<%# Eval("Lastname") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Email">
<HeaderTemplate>
<asp:LinkButton ID="lnkEmail" runat="server" CommandName="Sort" CommandArgument="Email">Email</asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblEmailEdit" runat="server" Text='<%# Eval("Email")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmail" runat="Server" Text='<%# Eval("Email") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code behind C#:
ListuserList = new List (); private SortDirection LastSortDirection { get { return (ViewState["LastSortDirection"] == null) ? SortDirection.Descending : (SortDirection)ViewState["LastSortDirection"]; } set { ViewState["LastSortDirection"] = value; } } private string LastSortColumn { get { return (ViewState["LastSortColumn"] == null) ? "Firstname" : (string)ViewState["LastSortColumn"]; } set { ViewState["LastSortColumn"] = value; } }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
userList = GetUsers(); // It will return the List of users from data source.
ViewState["USERLIST"] = userList; // It can be used for sorting
}
catch (Exception ex)
{
}
}
}
protected void grdManageUsers_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
if (e.CommandName == "Sort" && !string.IsNullOrEmpty(e.CommandArgument.ToString()))
{
userList = ViewState["USERLIST"] as List;
if (userList != null && userList.Count > 0)
{
IQueryable query = userList.AsQueryable();
string newSortColumn = string.Empty;
SortDirection newSortDirection = SortDirection.Descending;
BindGridView(Sort(query, e.CommandArgument.ToString(), LastSortColumn, LastSortDirection, out newSortColumn, out newSortDirection));
LastSortColumn = newSortColumn;
LastSortDirection = newSortDirection;
}
}
}
catch (Exception ex)
{
}
}
private void BindGridView(Listusers) { grdManageUsers.DataSource = users; grdManageUsers.DataBind(); }
public ListSort (IQueryable list, string sortColumn, string lastSortColumn, SortDirection lastSortDirection, out string newSortColumn, out SortDirection newSortDirection) { newSortColumn = string.Empty; newSortDirection = SortDirection.Descending; var result = new List (); try { if (sortColumn == lastSortColumn) { newSortColumn = sortColumn; if (lastSortDirection == SortDirection.Ascending) { newSortDirection = SortDirection.Descending; result = SortProcess (list, SortDirection.Descending, sortColumn); } else { newSortDirection = SortDirection.Ascending; result = SortProcess (list, SortDirection.Ascending, sortColumn); } } else { newSortColumn = sortColumn; newSortDirection = SortDirection.Ascending; result = SortProcess (list, SortDirection.Ascending, sortColumn); } } catch { throw; } return result; }
public ListSortProcess (IQueryable list, SortDirection sortDirection, string sortColumn) { IQueryable query = list.AsQueryable(); try { var pi = typeof(T).GetProperty(sortColumn); if (sortDirection == SortDirection.Ascending) { query = query.OrderBy(x => pi.GetValue(x, null)); } else { query = query.OrderByDescending(x => pi.GetValue(x, null)); } } catch { throw; } return query.ToList(); }