Sorting in Repeater Control

To implement sorting in repeater control first add the column name as link button:

<asp:LinkButton ID="lnkUserName" runat="server" CommandName="UserName">User Name</asp:LinkButton>

Please Note : Command Name Should be Same as the name of the column in your Datatable.

In this app we are using ViewState to Store the Column name and the Sort Order.
ViewState["Column"] & ViewState["Order"]

The Purpose of using the CommandName same as of Column name to avoid more hardcoding and to make application simple.

we can simply get the column name from e.CommanName.

Sample Code:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Set View State Value for Initial Sort Order
ViewState["Column"] = "UserName";
ViewState["Order"] = "ASC";

//Call To Method to Bind Repeater
BindRepeater();
}
}

/// <summary>
/// Bind Repeater with the Data
/// </summary>
private void BindRepeater()
{
DataTable dtData = GetData();
DataView dvData = new DataView(dtData);

//Sorting Filter
dvData.Sort = ViewState["Column"].ToString() + " " + ViewState["Order"].ToString();

rptUserData.DataSource = dvData;
rptUserData.DataBind();
dtData.Dispose();
dvData.Dispose();
}

/// <summary>
/// Method To Get Data in the form of DataTable
/// </summary>
/// <returns>DataTable</returns>
private DataTable GetData()
{
DataTable dtNew = new DataTable();
DataColumn dcUserName = new DataColumn("UserName");
dtNew.Columns.Add(dcUserName);
DataColumn dcAge = new DataColumn("Age");
dtNew.Columns.Add(dcAge);
DataColumn dcCountry = new DataColumn("Country");
dtNew.Columns.Add(dcCountry);
DataColumn dcState = new DataColumn("State");
dtNew.Columns.Add(dcState);
DataColumn dcCity = new DataColumn("CityName");
dtNew.Columns.Add(dcCity);
DataRow dr;

dr = dtNew.NewRow();
dr["UserName"] = "Lakhan Pal Garg";
dr["Age"] = "26";
dr["Country"] = "India";
dr["State"] = "Punjab";
dr["CityName"] = "Chandigarh";
dtNew.Rows.Add(dr);

dr = dtNew.NewRow();
dr["UserName"] = "Naveen Garg";
dr["Age"] = "24";
dr["Country"] = "Canada";
dr["State"] = "Ontario";
dr["CityName"] = "Toronto";
dtNew.Rows.Add(dr);

dr = dtNew.NewRow();
dr["UserName"] = "Amrik Singh";
dr["Age"] = "28";
dr["Country"] = "India";
dr["State"] = "Haryana";
dr["CityName"] = "Pehowa";
dtNew.Rows.Add(dr);

dr = dtNew.NewRow();
dr["UserName"] = "Puneet Sharma";
dr["Age"] = "25";
dr["Country"] = "England";
dr["State"] = "Rutland";
dr["CityName"] = "Oakham";
dtNew.Rows.Add(dr);

dr = dtNew.NewRow();
dr["UserName"] = "Avinash";
dr["Age"] = "40";
dr["Country"] = "USA";
dr["State"] = "New York";
dr["CityName"] = "Albany";
dtNew.Rows.Add(dr);

return dtNew;
}

/// <summary>
/// Repeater's Item Command Event
/// In this we will set the Column name and sorting Order for the selected column.
/// </summary>
protected void rptUserData_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == ViewState["Column"].ToString())
{
if (ViewState["Order"].ToString() == "ASC")
ViewState["Order"] = "DESC";
else
ViewState["Order"] = "ASC";
}
else
{
ViewState["Column"] = e.CommandName;
ViewState["Order"] = "ASC";
}

//Call To Method to Bind Repeater
BindRepeater();
}
}

Click Here To Download Source Code

Note: Please contact me in case you have any error in download the code: lakhangarg@gmail.com

0 comments: