1

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

user189404
  • 11
  • 2

3 Answers3

1

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

public string Country { get { return Address.Country; } }
orip
  • 73,323
  • 21
  • 116
  • 148
0

@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/

Fitzchak Yitzchaki
  • 9,095
  • 12
  • 56
  • 96
0

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

Rashmi Pandit
  • 23,230
  • 17
  • 71
  • 111