Sorting in grid view using Generic
List
In this
example we create a class student and bind grid view using generic list of
student type and add storing on generic list to bind grid view.
Student.cs
- using System.Collections.Generic;
-
-
-
- public class Student
- {
- public Student()
- {
-
-
-
- }
- public string RollNo { get; set; }
- public string StudentName { get; set; }
- public List<Student> GetStudentList()
- {
- List<Student> lstStudent = new List<Student>();
- Student objStudent1 = new Student();
- objStudent1.RollNo = "23";
- objStudent1.StudentName = "Ravi Shrivastav";
- lstStudent.Add(objStudent1);
- Student objStudent2 = new Student();
- objStudent2.RollNo = "46";
- objStudent2.StudentName = "Nitin Kumar";
- lstStudent.Add(objStudent2);
- Student objStudent3 = new Student();
- objStudent3.RollNo = "37";
- objStudent3.StudentName = "Neha Gupta";
- lstStudent.Add(objStudent3);
- Student objStudent4 = new Student();
- objStudent4.RollNo = "36";
- objStudent4.StudentName = "Markandey Pathak";
- lstStudent.Add(objStudent4);
- Student objStudent5 = new Student();
- objStudent5.RollNo = "56";
- objStudent5.StudentName = "Rahul Porwal";
- lstStudent.Add(objStudent5);
- Student objStudent6 = new Student();
- objStudent6.RollNo = "40";
- objStudent6.StudentName = "Piyush Pandey";
- lstStudent.Add(objStudent6);
- return lstStudent;
- }
- }
Default.aspx- <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
- CodeFile="Default.aspx.cs" Inherits="_Default" %>
-
- <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
- </asp:Content>
- <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
- <h2>Sorting in GridView using list</h2>
- <div style="font-size: 14px; color: #000;">
- <asp:GridView ID="gdvStudent" runat="server"
- AllowSorting="true"
- AutoGenerateColumns="false" OnSorting="gdvStudent_Sorting" Width="300px">
- <Columns>
- <asp:BoundField DataField="RollNo" HeaderText="Roll No" SortExpression="RollNo" />
- <asp:BoundField DataField="StudentName" HeaderText="Student Name" SortExpression="StudentName" />
- </Columns>
- </asp:GridView>
- </div>
- </asp:Content>
Default.aspx.cs - using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web.UI.WebControls;
- using System.Reflection;
- public partial class _Default : System.Web.UI.Page
- {
- List<Student> lstStudent = null;
- Student objStudent = new Student();
- protected void Page_Load(object sender, EventArgs e)
- {
- lstStudent = objStudent.GetStudentList();
- if (!IsPostBack)
- {
- gdvStudent.DataSource = lstStudent;
- gdvStudent.DataBind();
- }
- }
-
-
-
-
-
- protected void gdvStudent_Sorting(object sender, GridViewSortEventArgs e)
- {
- string Sortdir = GetSortDirection(e.SortExpression);
- string SortExp = e.SortExpression;
- var list = objStudent.GetStudentList();
- if (Sortdir == "ASC")
- {
- list = Sort<Student>(list, SortExp, SortDirection.Ascending);
- }
- else
- {
- list = Sort<Student>(list, SortExp, SortDirection.Descending);
- }
- this.gdvStudent.DataSource = list;
- this.gdvStudent.DataBind();
- }
-
-
-
-
-
- private string GetSortDirection(string column)
- {
- string sortDirection = "ASC";
- string sortExpression = ViewState["SortExpression"] as string;
- if (sortExpression != null)
- {
- if (sortExpression == column)
- {
- string lastDirection = ViewState["SortDirection"] as string;
- if ((lastDirection != null) && (lastDirection == "ASC"))
- {
- sortDirection = "DESC";
- }
- }
- }
- ViewState["SortDirection"] = sortDirection;
- ViewState["SortExpression"] = column;
- return sortDirection;
- }
-
-
-
-
-
-
-
-
- public List<Student> Sort<TKey>(List<Student> list, string sortBy, SortDirection direction)
- {
- PropertyInfo property = list.GetType().GetGenericArguments()[0].GetProperty(sortBy);
- if (direction == SortDirection.Ascending)
- {
- return list.OrderBy(e => property.GetValue(e, null)).ToList<Student>();
- }
- else
- {
- return list.OrderByDescending(e => property.GetValue(e, null)).ToList<Student>();
- }
- }
- }