Populate TreeView from a flat file
-
Hi people! I have been trying for days to populate a treeview from a particular structure. The text file i have to work with is similar to this: root root/folder1 root/folder2 root/folder2/subfolder1 root/folder2/subfolder2/subfolder3 root/folder3/subfolder4 root/folder4 Which I can almost get to populate a treeview with. In fact, i can get to root/folder2/subfolder2/subfolder3, and then it wont display the root/folder3/subfolder4 because it hasnt created the root/folder3 path first! There must be an easier way to do this!!! Here's my '2 evenings of working on this now', code so far:
ArrayList paths = {the file split line by line into an arraylist}
private void Run()
{
treeView1.Nodes.Add("root");
Buildtree("root", treeView1.Nodes[0]);
}private void Buildtree(String path, TreeNode parentNode)
{
ArrayList directories = GetDirectories(path);
if (directories.Count != 0)
{
foreach (string directory in directories)
{
TreeNode node = new TreeNode(directory.Remove(0, path.Length + 1));
parentNode.Nodes.Add(node);Buildtree(directory, node); } }
}
private ArrayList GetDirectories(string parentPath)
{
ArrayList directories = new ArrayList();
foreach (string path in paths)
{
if (path.StartsWith(parentPath))
{
bool hasSubdir = false;if (path.Contains('/') && (path.Length > parentPath.Length)) { int startpos = parentPath.Length + 1; string leftover = path.Substring(startpos, path.Length - startpos); if (!string.IsNullOrEmpty(leftover) && leftover.Contains('/')) hasSubdir = true; } if (!hasSubdir && (path != parentPath)) directories.Add(path); } } return directories;
}
Im going bonkers over this!!
-
Hi people! I have been trying for days to populate a treeview from a particular structure. The text file i have to work with is similar to this: root root/folder1 root/folder2 root/folder2/subfolder1 root/folder2/subfolder2/subfolder3 root/folder3/subfolder4 root/folder4 Which I can almost get to populate a treeview with. In fact, i can get to root/folder2/subfolder2/subfolder3, and then it wont display the root/folder3/subfolder4 because it hasnt created the root/folder3 path first! There must be an easier way to do this!!! Here's my '2 evenings of working on this now', code so far:
ArrayList paths = {the file split line by line into an arraylist}
private void Run()
{
treeView1.Nodes.Add("root");
Buildtree("root", treeView1.Nodes[0]);
}private void Buildtree(String path, TreeNode parentNode)
{
ArrayList directories = GetDirectories(path);
if (directories.Count != 0)
{
foreach (string directory in directories)
{
TreeNode node = new TreeNode(directory.Remove(0, path.Length + 1));
parentNode.Nodes.Add(node);Buildtree(directory, node); } }
}
private ArrayList GetDirectories(string parentPath)
{
ArrayList directories = new ArrayList();
foreach (string path in paths)
{
if (path.StartsWith(parentPath))
{
bool hasSubdir = false;if (path.Contains('/') && (path.Length > parentPath.Length)) { int startpos = parentPath.Length + 1; string leftover = path.Substring(startpos, path.Length - startpos); if (!string.IsNullOrEmpty(leftover) && leftover.Contains('/')) hasSubdir = true; } if (!hasSubdir && (path != parentPath)) directories.Add(path); } } return directories;
}
Im going bonkers over this!!
- Why are you using ArrayList instead of List? 1) That should be easy. 1.0) Use String.Split to split the string on '//' 1.1) Enumerate the resultant strings creating Nodes as necessary
-
Hi people! I have been trying for days to populate a treeview from a particular structure. The text file i have to work with is similar to this: root root/folder1 root/folder2 root/folder2/subfolder1 root/folder2/subfolder2/subfolder3 root/folder3/subfolder4 root/folder4 Which I can almost get to populate a treeview with. In fact, i can get to root/folder2/subfolder2/subfolder3, and then it wont display the root/folder3/subfolder4 because it hasnt created the root/folder3 path first! There must be an easier way to do this!!! Here's my '2 evenings of working on this now', code so far:
ArrayList paths = {the file split line by line into an arraylist}
private void Run()
{
treeView1.Nodes.Add("root");
Buildtree("root", treeView1.Nodes[0]);
}private void Buildtree(String path, TreeNode parentNode)
{
ArrayList directories = GetDirectories(path);
if (directories.Count != 0)
{
foreach (string directory in directories)
{
TreeNode node = new TreeNode(directory.Remove(0, path.Length + 1));
parentNode.Nodes.Add(node);Buildtree(directory, node); } }
}
private ArrayList GetDirectories(string parentPath)
{
ArrayList directories = new ArrayList();
foreach (string path in paths)
{
if (path.StartsWith(parentPath))
{
bool hasSubdir = false;if (path.Contains('/') && (path.Length > parentPath.Length)) { int startpos = parentPath.Length + 1; string leftover = path.Substring(startpos, path.Length - startpos); if (!string.IsNullOrEmpty(leftover) && leftover.Contains('/')) hasSubdir = true; } if (!hasSubdir && (path != parentPath)) directories.Add(path); } } return directories;
}
Im going bonkers over this!!
Hi, I just finished this little article[^] which may interest you. :)
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
-
Hi, I just finished this little article[^] which may interest you. :)
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
-
Woo Hoo!! Luc, Thank you VERY much! You're amazing! And thank you to all the others (one person) who came back with a slightly subdued answer. Now to try the code myself...
Hi, I just updated the little article[^] as I realized recursion wasn't really needed, a simple loop is sufficient. :)
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
-
Hi, I just finished this little article[^] which may interest you. :)
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
-
You're welcome. :)
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.