HierarGrid - A hierarchical DataGrid that displays master-detail relations
Problem:
The ASP.NET DataGrid is a popular control to display data in a table form with editing,
paging and sorting capabilites.
However it is only suitable to display single DataTables - there is no support for parent-child relations.
Goal:
To create a control that provides the standard DataGrid functionality and at the same time can display parent-child relations using templates to display the child elements.
Procedure:
I have created a custom control called HierarGrid that derives from the DataGrid and a custom DataGridColumn called HierarColumn.
The HierarGrid takes a DataSet that contains relations between the tables.
While iterating over the parent table it checks the related tables for child rows and if one is found it
dynamically loads a template for the child row(s).
The template is rendered invisibly into the custom HierarColumn and when the user clicks the plus icon,
the template content is copied via JavaScript into a newly created TableRow.
Download (V2.2):
- The sourcecode is available in C# as a VS.NET 2002 project.
A ready-to-use assembly (including help file).
How to get started:
A step-by-step tutorial that explains the usage of the HierarGrid is available on ASPAlliance
The demo that is mentioned in the article shows the usage of this control.
Sourcecode for the Demo (C#) or Sourcecode for the Demo (VB)A really advanced sample application with documentation that shows filtering, sorting, paging, exporting with the HierarGrid was written by Nigel Parham. Please note that it is provided as-is like all downloads on this site.
A simple demo that shows editing in the HierarGrid.
History:
V2.2.0.0 (published 2006-05-12)Bugfix: Under some conditions, UserControls still could not be reloaded when the application is configured as a website
V2.1.0.0 (published 2006-01-11)
Bugfix: UserControls could not be reloaded when the application is configured as a website (as opposed to virt.dir.) (thanks to Keith Culpepper)
Bugfix: fixed regression if ShowHeader=false and AllowPaging=false, colspan is wrong (thanks to Stuart Hilbert)
V2.0.0.0 (published 2005-12-18)
Bugfix: resolved compatibility issue with ASP.NET 2.0
V1.7.0.0 (published 2004-08-07)
Feature: TemplateDataMode.RunTime makes it possible to choose between SingleRow and Table for each relation at runtime (thanks to Tom Schmidt)
Feature: child templates are displayed for rows in selected state (thanks to Patrick Martin)
Bugfix: state of Checkboxes in child templates is now correctly preserved (thanks to Paolo Falabella)
Bugfix: corrected Mozilla DHTML incompatibilities (thanks to David Tétreault)
V1.6.0.0 (published 2004-05-30)
Bugfix: corrected problem with non-unique IDs that were generated for "ChildTemplate" panel in a DataMode=Table HierarGrid
Bugfix: child templates were inserted into first column when PagerStyle was set to "Top"
Bugfix: resetting the DataItem after inserting the child templates for further custom processing
Bugfix: copying selected state for <select> tags
V1.5.0.0 (published 2003-10-17)
Feature: nested HierarGrids now possibly with more than 3 levels (thanks to Matt Petteys)
Bugfix: RowExpanded[x] = false was ignored
Bugfix: excluded RowExpanded property from Designer's Property view
Bugfix: changed Namespace for internal DynamicControlsPlaceholder to avoid conflicts when using both HierarGrid and DCP in one solution (thanks to Matt Bornstein)
V1.4.0.0 (published 2003-09-07)
Feature: keeps rowstate (expanded/collapsed) between postbacks
Feature: property "RowExpanded" to initially expand rows
Bugfix: HierarColumn not added to Columns collection
Bugfix: Exception with DataViews as DataSource and TemplateDataMode=Table
Bugfix: When TemplateDataMode=Table and DataSet.EnforceContraints=true an exception occured
Bugfix: Designer declaration corrected
V1.3.0.0 (published 2003-08-25)
Bugfix: corrected JavaScript to allow ShowHeader=False for the Grid
Bugfix: problem solved when TemplateDataMode=Table and DataSource was set to DataSet instead of DataTable
V1.2.0.0 (published 2003-04-26)
Feature: added support for Netscape and Opera
V1.1.0.0 (published 2003-04-25)
Feature: added support for nested HierarGrids
Bugfix: Exception when calling DataBind twice within one Request
Bugfix: Wrong PostData for TextBoxes in a child template
V1.0.0.0 (published 2003-03-04)
Initial version
Known Problems:
- DataBind is called automatically for child templates (by design)
- if the row order or the page index changes between postbacks a wrong row may be expanded as the row state is stored by index. This issue is by design and can be worked around by calling HG.RowExpanded.CollapseAll()
- UserControls with "_" in the filename:
Unfortunatley, the DCP (that is used internally) cannot recreate UserControls whose filename contains "_" and other special characters. Furthermore, it doesn't work if a custom ClassName is given in the ASCX file.