I have a data set containing up to ~1 million rows, provided by an IList data source. I''d like to use your grouping grid/engine to provide grouping functionality for this.
The data source implements paging of this data to and from disk in chunks of ~1000 records.
Am I better off using your virtual grid and grouping engine separately for this (along the lines of your VirtTreeGrid sample) or should I stick to the GridGroupingControl?
Given that you understand the internals of the controls in question (in particular how and when the data is loaded), what is the most efficient way to handle this in your opinion?
the grouping engine will iterate through all record you provide and sort/categorize them manually. Therefore if you assign a datasource to the engine each record needs to be accesses at least once and memory is allocated for it. So, if you give it a million rows that can take a while (e.g. check out the GroupingPerf example with 200-300 000 records) and it will also consume quite a bit of memory (I guess at least 300 or 400 MB of memory).
With a virtual grid you have the advantage that all you need to know is the row count and records are only access when displayed. But you have lots of work to implement to get them into a tree-like display.
One idea would be to page the data before you assign them to grouping engine. Say you have a chunk of 1000 records, you assign a first chunk of data to the engine, setup columns, appearance etc. Then when you want to display the next 1000 records you just assign the next 1000 records and set Table.TableDirty = true. The grid will then categorize those records but keep columns and appearance information and just display those new records.