I have 5 tables in a L2S Classes dbml : Global >> Categories >> Sub-Category >> Item >> Item Data. I want to be able to navigate from the Global table down a tree like structure
Since you are dealing different types in this case, you will have to implement a common interface on each of them to make the code generic. The basic approach would be to create an interface that includes any needed properties (e.g. DisplayText, ActionURL, etc) then iterate over the collection recursively.
Here's a rough example:
public interface IDataItem
{
string DisplayText { get; }
string ActionUrl { get; }
bool HasChildren { get; }
IEnumerable GetChildren();
}
public void CreateTree(HtmlTextWriter writer, IEnumerable collection)
{
writer.WriteFullBeginTag("ul");
foreach (var data in collection)
{
writer.WriteFullBeginTag("li");
writer.WriteBeginTag("a");
writer.WriteAttribute("href",data.ActionUrl);
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(data.DisplayText);
writer.WriteEndTag("a");
if(data.HasChildren)
CreateTree(writer, data.GetChildren());
writer.WriteEndTag("li");
}
writer.WriteEndTag("ul");
}
You will have to implement the interface on each of your types that you want included in the treeview. The just pass in the collection of the top level type and the method above will walk down the hierarchy creating the needed nested list.