- Home
- LLBLGen Pro
- LLBLGen Pro Runtime Framework
once and for all... sorting a view
Joined: 31-Jul-2006
Hi Folks,
I decided to post this question only after an extensive (almost extensive) search in the forum.
Here's what I've come up with to sort columns in a datagrid (Otis says: oh.. not again!!!).
private void dgLocationContainer_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
SortExpression sorter = new SortExpression();
switch(e.SortExpression)
{
case "ContainerDescription":
if((strSortColumn==string.Empty)||(strSortColumn!= e.SortExpression))
{
sorter.Insert(0, ViewLocationContainerFields.ContainerDescription | SortOperator.Ascending);
strSortColumn = e.SortExpression;
}
else if((strSortColumn == e.SortExpression) && (sopOrder == SortOperator.Ascending))
{
sorter.Insert(0, ViewLocationContainerFields.ContainerDescription | SortOperator.Descending);
strSortColumn = e.SortExpression;
sopOrder = SortOperator.Descending;
}
else if((strSortColumn == e.SortExpression) && (sopOrder == SortOperator.Descending))
{
sorter.Insert(0, ViewLocationContainerFields.ContainerDescription | SortOperator.Ascending);
strSortColumn = e.SortExpression;
sopOrder = SortOperator.Ascending;
}
break;
}
ViewLocationContainerTypedView vlcTypedView = new ViewLocationContainerTypedView();
vlcTypedView.Fill(int.MaxValue, sorter);
dgLocationContainer.DataSource = vlcTypedView;
dgLocationContainer.DataKeyField = "LocationContainerID";
dgLocationContainer.DataBind();
}
Both strSortColumn and sopOrder are member variables of base class with initial values: strSortColumn = string.Empty; sopOrder = SortOperator.Ascending;
If I'm doing it the right way, there are two issues: 1. I'll have to write a case block for each of the columns in the grid (that's painful). 2. If I want to load the typedview from Session, how would I pass the sorter to this 'already-Filled' view? The code for that would look something like this:
ViewLocationContainerTypedView vlcTypedView = (ViewLocationContainerTypedView) Session["CurrentView"];
I see a 'vlcTyped.DefaultView.Sort' method, but I'm not sure how to use it (not sure if it will even help me).
Help is appreciated.
Thanks Arun
Joined: 31-Jul-2006
I found it.. I found it.. I found it..
In the post: http://llblgen.com/TinyForum/Messages.aspx?ThreadID=3722&HighLight=1
private void dgLocationContainer_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
switch(e.SortExpression)
{
case "ContainerDescription":
if((strSortColumn==string.Empty)||(strSortColumn!= e.SortExpression))
{
strSortColumn = e.SortExpression;
strSortOrder = "ASC";
}
else if((strSortColumn == e.SortExpression) && (strSortOrder == "ASC"))
{
strSortColumn = e.SortExpression;
strSortOrder = "DESC";
}
else if((strSortColumn == e.SortExpression) && (strSortOrder == "DESC"))
{
strSortColumn = e.SortExpression;
strSortOrder = "ASC";
}
break;
case "CompanyName":
if((strSortColumn==string.Empty)||(strSortColumn!= e.SortExpression))
{
strSortColumn = e.SortExpression;
strSortOrder = "ASC";
}
else if((strSortColumn == e.SortExpression) && (strSortOrder == "ASC"))
{
strSortColumn = e.SortExpression;
strSortOrder = "DESC";
}
else if((strSortColumn == e.SortExpression) && (strSortOrder == "DESC"))
{
strSortColumn = e.SortExpression;
strSortOrder = "ASC";
}
break;
case "DepartmentName":
if((strSortColumn==string.Empty)||(strSortColumn!= e.SortExpression))
{
strSortColumn = e.SortExpression;
strSortOrder = "ASC";
}
else if((strSortColumn == e.SortExpression) && (strSortOrder == "ASC"))
{
strSortColumn = e.SortExpression;
strSortOrder = "DESC";
}
else if((strSortColumn == e.SortExpression) && (strSortOrder == "DESC"))
{
strSortColumn = e.SortExpression;
strSortOrder = "ASC";
}
break;
}
ViewLocationContainerTypedView vlcTypedView = (ViewLocationContainerTypedView) Session["CurrentGrid"];
vlcTypedView.DefaultView.Sort = strSortColumn + " " + strSortOrder;
dgLocationContainer.DataSource = vlcTypedView;
dgLocationContainer.DataKeyField = "LocationContainerID";
dgLocationContainer.DataBind();
}
}
The key line in the above code is: ** vlcTypedView.DefaultView.Sort = strSortColumn + " " + strSortOrder; **
Sorry for the post and thanks Otis. Arun