I have a class that contains hierarchical data. I want to present this data in my ASP.net webapp using nested repeaters. How do I do this? I've only ever done one level of nesting, how do I do say five levels?
Each item can have zero or many sub items. I'm basically just indenting at each subleveling using some css stuff. I do not want to use the treeview control, I want to strictly stick with a repeater.
Update:
My data comes from a database. I have an item datatable with some basic properties.
Item
{
ID,
Name,
Description,
...
}
Then I have a many to many table with:
Parent
{
ParentID,
ChildID
}
I'm iterating through each item and displaying its children; and its children's children. I assume this would best be accomplished with nested repeaters, but I could be wrong.
It's always cleaner to deal with the datasource than messing about with ItemDataBound, but this is even more the case when nesting Repeaters:
The inner datasource could also be an evaluated property, or a call to a method that returns the enumeration wanted. Just be aware that it will be called with an object. I prefer to write the specific version, and then overload:
One thing to be aware of is that if you want to get the current object in the parent repeater than you have to obtain it with:
Be aware that
FindControl
is not recursive, it will only get the children.You can nest repeaters without a problem. More then 2 levels deep gets nasty though. Here's how:
The html looks something like this:
The codebehind looks like this:
I've found that the simplest way to do nested repeaters without worrying about databinding events is to just set the DataSource using
<%# %>
syntax.For example:
This is presuming that your Departments class has an Employees property - eg:
If your outer-repeater object doesn't have a property corresponding to the inner-repeater object you can still use this trick, by adding a method in your code-behind that does the calculation. So your inner repeater might become:
and then GetEmployees might look something like: