<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(); }
No comments:
Post a Comment