I have a requirement to create a "super grid" as part of an application, which will consist of multiple frozen and scrolling panes. The grid also has the requirements that it must support the following features:
- Display a datagrid with 100s of rows with “reasonable” scrolling performance
- Group by a certain field, collapse/expand grouped
- Display any control inside a field, e.g. images, text, combobox, button
- Allow buttons and editing of fields as well as read-only mode
- Allow multiple vertical split panes (or workaround, multiple synchronised grids)
- User column re-ordering with persistence
- User column sorting ascending/descending
- Dynamic insertion/deletion of columns (column choosing)
- 4th dimension below grouping – RowDetails template on selected row
- Allow Flashing / animated cell/row templates on value update
My initial feasibility suggests that the WPF Datagrid is capable of almost all the requirements above (with heavy templating), however the multiple vertical split panes may not be covered. Below is a diagram of what I'm trying to achieve:
I would like to enquire if anyone has done this before and if so, what grid technology you have used.
- Can the above be done in WPF Datagrid? I am aware of Frozen columns however this appears to apply to freezing the first N columns only
- Can the above be achieved with multiple grids and synchronizing the Vertical scroll positions?
- If so, will this solution still be virtualized?
- Are there any third party grids you can recommend to achieve this instead? Please note we will be heavily styling the grid according to in-house branding so it must be flexible and Blendable
Any comments/suggestions appreciated.
Update - Feasibility Investigation Results
- I have a working prototype for this using 3x grids and collapsable grid splitters between them.
- The scrollviewers are synchronized using the answer from this question.
- Selected row synchronized across three grids by binding to a common SelectedIndex property with TwoWay binding.
I will be working on grouping and rowdetails templates next... Thanks to answerers for your points! :)