I'm making a grid that displays file system directories and files as a hierarchy
The problem is it only works fine for only the first level of hierarchy, what I should do to make this supports unlimited levels.
here is my code:
Code File:
The problem is it only works fine for only the first level of hierarchy, what I should do to make this supports unlimited levels.
here is my code:
ASPX:<div> <telerik:RadGrid ID="RadGrid1" runat="server" AllowMultiRowEdit="True" AutoGenerateHierarchy="True" CellSpacing="0" GridLines="None" Skin="Windows7" ondetailtabledatabind="RadGrid1_DetailTableDataBind"> <MasterTableView DataKeyNames="FullName,IsDirectory,ParentDirectory"> <DetailTables> <telerik:GridTableView AutoGenerateColumns="true" DataKeyNames="FullName,IsDirectory,ParentDirectory"> </telerik:GridTableView> </DetailTables> </MasterTableView> </telerik:RadGrid> </div>Code File:
public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List<FileWrapper> dirs = new DirectoryInfo("C://").GetDirectories().Select(obj => new FileWrapper(obj, true)).ToList(); List<FileWrapper> files = new DirectoryInfo("C://").GetFiles().Select(obj => new FileWrapper(obj, true)).ToList(); dirs.AddRange(files); RadGrid1.DataSource = dirs; RadGrid1.DataBind(); } } protected void RadGrid1_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e) { GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem; bool isDirectory = bool.Parse(dataItem.GetDataKeyValue("IsDirectory").ToString()); string FullName = dataItem.GetDataKeyValue("FullName").ToString(); if (isDirectory) { DirectoryInfo d = new DirectoryInfo(FullName); List<FileWrapper> dirs = d.GetDirectories().Select(obj => new FileWrapper(obj, false)).ToList(); List<FileWrapper> files = d.GetFiles().Select(obj => new FileWrapper(obj, false)).ToList(); dirs.AddRange(files); e.DetailTableView.DataSource = dirs; } }}public class FileWrapper{ public string Name { get; set; } public string FullName { get; set; } public bool IsDirectory { get; set; } public DateTime CreationTime { get; set; } public string ParentDirectory { get; set; } public List<FileWrapper> Children { get; set; } public FileWrapper(object o, bool isRoot) { if (o is FileInfo) { FileInfo f = (FileInfo)o; Name = f.Name; FullName = f.FullName; CreationTime = f.CreationTime; IsDirectory = false; if (!isRoot) { ParentDirectory = f.Directory.FullName; } } if (o is DirectoryInfo) { DirectoryInfo d = (DirectoryInfo)o; Name = d.Name; FullName = d.FullName; CreationTime = d.CreationTime; IsDirectory = true; if (!isRoot) { ParentDirectory = d.Parent.FullName; } } }}