Thank you for contacting us.
You're by far the first from doing so but this is why Sitefinity 6.0 will include a customizable sort/filter option for products that includes even custom fields. It's already finished and ready for 6.0 which is due out within the next couple weeks. We would definitely suggest waiting and upgrading to 6.0 as it provides a load of new features related not only to Ecommerce but Sitefinity as a whole.
With that being said you don't have to create your own product list from scratch hardly ever. Our widgets are ASP.NET custom controls so you can create a class and inherit from the ProductList and then override the necessary methods/provide your own methods.
Something like this:
CustomProductList : ProductsView
//find custom sort control -> find listview -> set sort expression
The extended class is its own control. You need to register it as you would any custom control. The easiest way to do this is with Thunder.
I hope this helps.
I tried a variation on this example as I need to customise the result oft he Product View but when I add the control to the page I get the following error message (on the control): Value cannot be null.
Parameter name: originalControl
This does make sense, I guess at the LoadView method is expecting a parameter but where is that coming from?
My code is:
public class ProductListCustom : ProductsView
protected override void LoadView (string viewName)
// some customisation here