Tapestry's grid expects a GridDataSource as the "source" parameter.
What you may not know is that tapestry has a TypeCoercer to make things easy for us. If you provide a list as the source of a grid, tapestry will happily TypeCoerce the list to a GridDataSource (which is what is happening in your case). So, instead of passing a list as the "source" you should pass a custom GridDataSource implementation. You might find it easy to extend (or delegate to) CollectionGridDataSource. You'll need to take care with paging.