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):
How to get started:
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.
Feedback:
If you have any comments, suggestions or questions, please check my
Weblog or feel
free to
drop me a line.
Please note that the postings, software and source code on this website are provided "AS IS" with no warranties, and confers no rights.