AbleCommerce how to handle sorting of GridView control

Introduction

This article talks about manually handling the sorting routine of a GridView control.   When using an object class as the Datasource for a GridView control in AbleCommerce, the GridView control will not automatically manage sorting.  This only works when using a SQL-based DataSourceObject.

So you’re left with creating your own method to handle the Sorting event on the GridView control.  Not so tough, there’s plenty of programming code examples in Google.   What’s harder to find is an example that actually retains the previous sort order for each column.

Enter:  e.SortDirection.  It’s exposed in the Sorting event, but you need a way to store the previous sort order for each column so the routine knows which way to flip it (Ascending or Descending).  If you don’t handle it, clicking a column always results in an Ascending sort order.

Here’s a good piece of code that makes nice use of Viewstate:

protected void ProductsGrid_Sorting(object sender, GridViewSortEventArgs e)

{

    if (e.SortExpression == (string)ViewState["SortColumn"])

    {

        // We are resorting the same column, so flip the sort direction

        e.SortDirection =

            ((SortDirection)ViewState["SortColumnDirection"] == SortDirection.Ascending) ?

            SortDirection.Descending : SortDirection.Ascending;

    }

    // Apply the sort

    BindProductsGrid(e.SortExpression, ConvertSortDirection(e.SortDirection));

    ViewState["SortColumn"] = e.SortExpression;

    ViewState["SortColumnDirection"] = e.SortDirection;

 

}

AbleCommerce 7 how to sort a collection of products

Introduction

Often times you find yourself working with collections of products while programming in AbleCommerce 7.  But, now you need to sort those products on a specific field and you’re not sure how.

Well it’s incredibly easy if you use the AbleCommerce object class ProductCollection.  The ProductCollection class has a convenient sort method that works on any field.

Remember that the example variable _ResultProducts is a ProductCollection object.  This technique does not work when using List<Product>

// sort the results

CommerceBuilder.Common.GenericComparer _MyComparer = new GenericComparer("Price", GenericComparer.SortDirection.ASC);

_ResultProducts.Sort(_MyComparer);

 

If you haven’t noticed yet, AbleCommerce search methods don’t always use ProductCollection as the return object.  Sometimes it’s a List<Product>.  If you need to sort a List<Product>, just copy the items to a ProductCollection object using a foreach() loop like this:

List<Product> _OldProducts = new List<Product>();

ProductCollection _SortableProducts = new ProductCollection();

// POPULATE YOUR _OldProducts //

...

// Now copy the products to a sortable collection

foreach (Product _Product in _OldProducts)

{

    _SortableProducts.Add(_Product);

}

 

// sort the results

CommerceBuilder.Common.GenericComparer _MyComparer = new GenericComparer("Price", GenericComparer.SortDirection.ASC);

_ResultProducts.Sort(_MyComparer);