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;
}
}
}
}