This is the best way! The only way!
Guillermo Ruffino: This does not answer the question exactly, here I'm using a denormalized result set instead of the one in the question, however adapting data should not be the main issue here.
Here is how I get mine grouping, first I attach to row data bound to find groups, and also I hijack the render delegate...