Create a very simple page in ASP.NET 2.0, add a TreeView control and set ShowLines=true; now browse the page with Internet Explorer 7: you'll very likely see something like this:
In IE 6 this looks good...
The point is that Internet Explorer 7 changes the boxing model: now a box that's too small to accomodate ita content won't stretch like it does on all other browsers including IE6, it will try to stay as small as possible. The problem in this case is that the DIV tags generated by the control are just 1 pixel height, which was working fine until now. Here is how the "View source" for the page above looks:
1: [...]
2: <table cellpadding="0" cellspacing="0" style="border-width:0;">
3: <tr>
4: <td>
5: <div style="width:20px;height:1px">
6: <img src="/TreeViewSample/WebResource.axd?d=vGK_uMmdWLf5UZMMUhv9tSAl-YQg-jrsZ90xzYAI6TE1&t=632985107273882115" alt="" />
7: </div>
8: </td>
9: <td>
10: <a id="TreeView1n1" href="javascript:TreeView_ToggleNode(TreeView1_Data,1,TreeView1n1,'l',TreeView1n1Nodes)">
11: <img src="/TreeViewSample/WebResource.axd?d=vGK_uMmdWLf5UZMMUhv9tfjlKbdZ_ojL4O8CY0ydKO_HFK9lO1t2cZ2AjaDIqJy_0&t=632985107273882115"
12: alt="Collapse New Node" style="border-width:0;" />
13: </a>
14: </td>
15: <td style="white-space:nowrap;">
16: <a class="TreeView1_0" href="javascript:__doPostBack('TreeView1','sNew Node\\New Node')"
17: onclick="TreeView_SelectNode(TreeView1_Data, this,'TreeView1t1');" id="TreeView1t1">New Node</a>
18: </td>
19: </tr>
20: [...]
As you can see, the first DIV tag contains a style definition with "height:1px"; that's the problem.
And now, here is how we can sort this out:
Note that normally the style defined in the DIV takes precedence over the style defined at page level (or external .css file), but since in this case we need to override that setting, we can use the !important CSS directive; here is how the modified source looks like:
2: <html xmlns="http://www.w3.org/1999/xhtml">
3: <head runat="server">
4: <title>Untitled Page</title>
5: <style>
6: .tree td div {
7: height: 20px !important
8: }
9: </style>
10: </head>
11: <body>
12: <form id="form1" runat="server">
13: <div>
14: <asp:TreeView ID="TreeView1" runat="server" ShowLines="True" CssClass="tree">
15: <Nodes>
16: <asp:TreeNode Text="New Node" Value="New Node">
17: <asp:TreeNode Text="New Node" Value="New Node">
18: <asp:TreeNode Text="New Node" Value="New Node">
19: [...]
And the resulting page:
P.s.: thanks to my colleague Markus Rheker for this one!
Carlo
One new subscriber from Anothr Alerts
Para poder ver las líneas que unen los nodos en un TreeView, hice uso de las siguientes propiedades LineImagesFolder
The listed changes had no affect. I still get broken vertical lines with IE7 and FF.
Uhm... weird, I tested them before posting... Matthew, are you sure you are using the right values? If you copy the code above and test in a sample page, what do you get?
Matthew Weaver prolly forgot this step:
In your TreeView component add a referende to CssClass="tree"
Excellent info 2nd link on goog
Thanks!!!
Awesome. Worked like a charm. I was getting sick of looking at those broken lines :)
Excellent job :) the only reason i wasn't using the css adapted treeview was for the lines.
Superb! I've been trying to sort out these gaps for months...
thanks for the tip!
thanks a lot! I wouldn't find out..
Greate respect for solve this
Great post, I have been looking into this myself and also figured out the 1px height problem but couldn't solve it.
Thx for your post!
The solution works great.
Unfortunately, lines break again when you set treeview's NodeWrap property to true, and a treeview item spans across multiple lines.
True... I guess that's because those dotted lines are actually images (if you use IE developer toolbar you can quickly highlight them all) and are not easilly customizable, unless maybe you use your own set of images for the control. I tried to tweak it with some stylesheet properties but with no luck so far... :-(
Let's see if I can come up with something useful