Sorting with MVCContrib

Does anyone know how to sort the MVCContrib grid when using a complex object.

My grid is displaying a list of Person and I'm trying to sort on the Country property. The problem is that Country is a property an Address class which is a property of Person.

Person.Address.Country

    <%Html.Grid(Model).Columns(column =>
   {
       column.For(x => x.Id);
       column.For(x => x.FirstName);
       column.For(x => x.LastName).Sortable(false);
       column.For(x => x.Address.Country).Sortable(false);
       column.For(x => x.Age).Sortable(true);
   }).Render(); %>

Exception:
Property 'Country' is not defined for type '{Namespace}.Person'
var sourceProp = Expression.Property(sourceParam, this.SortBy); \MVCContrib\UI\Grid\Sortable\ComparableSortList.cs Line: 41

Any suggestions would be helpful.

Thank you,

MG1

13.10.2009 20:42:59
3 ОТВЕТА

A workaround would be to expose Country as a property on Person and use that:

public string Country { get { return Address.Country; } }
1
13.10.2009 20:51:57

@orip gave you an answer.

But if you want to use the sorting feature you need to use:

<%Html.Grid(Model).Columns(column =>
{
   column.For(x => x.Id);
   column.For(x => x.FirstName);
   column.For(x => x.LastName).Sortable(false);
   column.For(x => x.Address.Country).Sortable(false);
   column.For(x => x.Age).Sortable(true);
}).RenderUsing(new SortableHtmlTableGridRenderer<Person>())
 .Render(); %>

Source: http://www.jeremyskinner.co.uk/2009/02/23/rewriting-the-mvccontrib-grid-part-3-gridmodels-and-gridrenderers/

0
10.02.2010 00:58:50

You need to use SortColumnName for this.

column.For(x => x.Address.Country).SortColumnName("Address.Country");

I have tested this and it works like a charm :)

If you are not able to access SortColumnName(), you can get the latest version of MVC contrib from http://mvccontrib.codeplex.com/SourceControl/changeset/changes/7db1cecc938f

0
20.08.2010 14:03:02