Sorting using IComparer Interface using
Implement a Generic Comparer class as below.
public class GenericComparer: IComparer {
private SortDirection _sortdirection;
private string _sortexpression;
private string _sortorder;
public SortDirection sortdirection {
get {
return _sortdirection;
}
set {
_sortdirection = value;
}
}
public string sortexpression {
get {
return _sortexpression;
}
set {
_sortexpression = value;
}
}
public string sortorder {
get {
return _sortorder;
}
set {
_sortorder = value;
}
}
public GenericComparer(string sortexpression, SortDirection sortdirection, string sortorder) {
this.sortexpression = sortexpression;
this.sortdirection = sortdirection;
this.sortorder = sortorder;
}#region IComparer Members
public int Compare(T x, T y) {
PropertyInfo propertyinfo;
IComparable obj1;
IComparable obj2;
string direc;
string strStart;
string strEnd;
propertyinfo = typeof(T).GetProperty(sortexpression);
obj1 = (IComparable) propertyinfo.GetValue(x, null);
obj2 = (IComparable) propertyinfo.GetValue(y, null);
if (sortorder.EndsWith("asc")) {
return obj1.CompareTo(obj2);
}
else {
return obj2.CompareTo(obj1);
}
}#endregion
}
Now write the follwing code in grid 's sorting event.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState.Add("exp", "");
}
}
protected void grvLstFtpFiles_Sorting(object sender, GridViewSortEventArgs e)
{
BusinessObjects.ViewUploadedFilesCollection oViewUploadedFilesCol = new BusinessObjects.ViewUploadedFilesCollection();
oViewUploadedFilesCol.Query.Where(oViewUploadedFilesCol.Query.NTrialId.Equal(ddlTrials.SelectedValue));
oViewUploadedFilesCol.Query.OrderBy(oViewUploadedFilesCol.Query.DCreatedDt.Descending);
oViewUploadedFilesCol.Query.Load();
string sortorder;
ViewState.Add("colname", e.SortExpression);
if ( ViewState["exp"] == "")
{
ViewState["exp"] = e.SortExpression.ToString() + ".asc";
}
else if ( ViewState["exp"].ToString() == e.SortExpression.ToString() + ".asc")
{
ViewState["exp"] = e.SortExpression.ToString() + ".dsc";
}
else
{
ViewState["exp"] = e.SortExpression.ToString() + ".asc";
}
sortorder = ViewState["exp"].ToString();
GenericComparer comp = new GenericComparer(e.SortExpression, e.SortDirection, sortorder);
System.Collections.Generic.List list = (System.Collections.Generic.List)oViewUploadedFilesCol;
//list.Sort(comp);
list.Sort(new GenericComparer(e.SortExpression, e.SortDirection, sortorder));
grvLstFtpFiles.DataSource = list;
grvLstFtpFiles.DataBind();
}
This sorting method can be used used when binding gridview with a collection of objects, i have used this code to bind a grid view with entity spaces collection object. This method can be useful when one uses object datasource to bind a grid.
In the above code oViewUploadedFilesCol is a collection of objects of type '
BusinessObjects.ViewUploadedFiles ''
Subscribe to:
Post Comments (Atom)

2 comments:
GridView sorting C#
Great Article
IEEE Projects on Information Security
Project Centers in Chennai
JavaScript Training in Chennai
JavaScript Training in Chennai
Post a Comment