once and for all... sorting a view

Posts   
 
    
nmarun
User
Posts: 27
Joined: 31-Jul-2006
# Posted on: 22-Aug-2006 00:44:56   

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

nmarun
User
Posts: 27
Joined: 31-Jul-2006
# Posted on: 22-Aug-2006 01:07:31   

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