Messy TreeView Results

P

pbd22

Hi.

I am getting odd treeview results and hope you can help.

I am parsing a string, "x/y/z", turning it into an array (that
always seems to start with an empty string) and then
using the elements of that array to populate a single tree.
The first non-empty element is the root, the last is a file -
everything in between is a folder.

THE PROBLEM is that I am getting the root with an
empty folder as one tree, then the next element with
all the other nodes below it.

So,

array [1], [2], [3], [4]

Should produce the following results:

-- [1] (root folder)
-------[2] (folder)
------------[3] (folder)
------------[4] (file)

But, I am getting

--[1] (root folder)
------[?] (empty folder with no name)

--[2] (folder)
------[3] (folder)
------[4] (file)

And this pattern repeats down the grid.

Below is the code, I would really appreciate some
clear input help here. Thanks.

public void OnDataBinding(object sender, EventArgs e)
{

int count = 0;

TreeView tree = (TreeView)sender;
GridViewRow container = (GridViewRow)tree.NamingContainer;

if (storedNodes.Count != 0)
{

string path = storedNodes.Pop().ToString();
string[] arr = path.Split('/');

root = new TreeNode();
root.ImageUrl = "folder.gif";

if (arr[0] != "")
root.Text += arr[0].ToString();
else if (arr[1] != "")
root.Text += arr[1].ToString();

root.SelectAction = TreeNodeSelectAction.SelectExpand;
root.PopulateOnDemand = true;
root.SelectAction = TreeNodeSelectAction.Expand;

for (int i = 1; i <= arr.Length - 1; i++)
{

if (arr != "")
{

TreeNode node = new TreeNode();

if (i != arr.Length - 1)
{

node.ImageUrl = "folder.gif";
node.Text += arr.ToString();
node.SelectAction =
TreeNodeSelectAction.SelectExpand;
node.PopulateOnDemand = true;
node.SelectAction =
TreeNodeSelectAction.Expand;

}
else
{

node.ImageUrl = "play.jpg";
node.Text += arr.ToString();
node.SelectAction = TreeNodeSelectAction.None;
node.Value = "vBrickTree";
node.SelectAction =
TreeNodeSelectAction.Expand;

}

root.ChildNodes.Add(node);
count++;

}

}

tree.Nodes.Add(root);


}

}
 
P

pbd22

Hi.

Thanks for responding.

I get an "InxedOutOfBoundsException" :

for (int i = 1; i <= arr.Length; i++)
{

if (arr != "") < --- EXCEPTION THROWN HERE, WHERE
i = 4
{


The Current Range is:

[0] ""
[1] "Utah"
[2] "Jackson"
[3] "Climbing.wmv"
 
M

Mark Rae [MVP]

Thanks for responding.

I get an "InxedOutOfBoundsException" :

for (int i = 1; i <= arr.Length; i++)

With the greatest of respect, what happens if you actually try the code I
suggested...?
 
P

pbd22

With the greatest of respect, what happens if you actually try the code I
suggested...?

Sorry, I did try the code you suggested.
You are talking about the 1, right? I had
it at zero but played around and then, sloppily,
cut and paste the "played around" version
here. But, the result is as i said - out of bounds
(when i = 0 or 1)..

Thanks again.
 
P

pbd22

Not specifically...

for (int i = 0; i < arr.Length; i++)

i am sorry. i am doing this in between
meetings and am making more of a
mess than I started with.

I did i=0 as you suggested. for an
array from [0] to [3], where arr.Length = 4
and i=0 I get an array out of bounds
exception.

Thanks for being patient.
 
M

Mark Rae [MVP]

I did i=0 as you suggested. for an
array from [0] to [3], where arr.Length = 4
and i=0 I get an array out of bounds
exception.

Thanks for being patient.

There must be an error somewhere else, then...

Arrays are zero-based by default...

So, if your array has four elements, the first will be at index [0] etc...

Have you tried stepping through the code...?
 
P

pbd22

This seems to work.
Does it look right to you?

I am getting the nodes I want but the
tree is not displaying as a stair case, more of
a pyramid standing on its bottom edge.

string[] arr = path.Split('/');

for (int i = 0; i <= arr.Length -1; i++)
{

if (arr != "")
{

child = new TreeNode();
child.ImageUrl = "folder.gif";
child.Text += arr.ToString();
child.PopulateOnDemand = true;
child.ChildNodes.Add(child);
tree.Nodes.Add(child);

}
}
 
M

Mark Rae [MVP]

This seems to work.
Does it look right to you?

Pretty much.
for (int i = 0; i <= arr.Length -1; i++)

I guess it comes down to preference, but I was always taught that

for (int i = 0; i < arr.Length; i++)

gave better performance because it didn't need to check whether the
incrementing variable was EITHER less than OR equal to the upper boundary of
the array, and didn't have to perform the additional calculation of
subtracting 1 from the upper boundary of the array...

Probably makes no difference to IL, though...
 
P

pbd22

it's odd.
In Firefox, the folders are in a perfect vertical line.
In IE, sort of a pyramid on its side.

I think maybe the former child is not a subset
of the previous child?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,922
Messages
2,570,047
Members
46,475
Latest member
RacheleGri

Latest Threads

Top