Search code examples
c#wcf-ria-servicessilverlight-5.0

Grouping and Paging with DomainCollectionView


I'm trying to get grouping and paging (in a datagrid) to work simultaneously in RIA Services. I already have a pretty elaborate UserControl that is based on the excellent DomainCollectionView. However, I've had trouble making the grouping work.

I added this line to the sample:

this.CollectionView.GroupDescriptions.Add(new PropertyGroupDescription("Int32"));

Note about the sample: I changed how Int32 is being assigned as key % 2, so there should be two resulting groups, which should have hundreds of items per group. The paging is set to 10 items. No grouping is applied at the query level.

So in this case, I would expect the grouping header to show the total number of items, however, it'll just 'Group 0', as having an item count of 10, which is clearly incorrect. It is only showing the item counts in the first page.

Question Did any make grouping and paging work together with or without DomainCollectionView?

For proper context refer to the article regarding DomainCollectionView and the sample posted for it.


Solution

  • Kyle McClellan of Microsoft replied to a personal email regarding this question and provided the detailed explanation below.

    In summary, grouping and paging won't work together well - you certainly won't get a fully featured grouping experience in the DataGrid.

    For me the solution will be to remove paging when grouping is present.

    On Wed, Jun 6, 2012 at 7:51 PM, Kyle McClellan wrote: Ah, now I understand what you were expecting. There are two (competing?) things at play here. First, the client technology knows nothing about the server. It only sees data that exists locally. Because of this, the controls, etc. will report that there’s only a single group and it only contains a page’s worth of data. Second, the server technology can see the all the data but has only been asked to return a single page. It sorts and slices the data appropriately and then returns it. It could determine the number of groups and the size of each, but there’s no way to communicate it back to the client.
    What you’re seeing is the view functioning as designed. It will show you all the items in group 0 before all the items in group 1. At some point in the middle you will see two groups on a page, but otherwise the results will all be in the same group.