Messy TreeView Results

  • Thread starter Thread starter pbd22
  • Start date Start date
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);


}

}
 
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"
 
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...?
 
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.
 
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.
 
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...?
 
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);

}
}
 
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...
 
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?
 
Back
Top