Asp.net Treeview 客户端选中效果实现 (初级)

 

Asp.net Treeview 客户端选中效果实现

最近将asp.net默认自带的treeview控件,做成一个导航树,导向其它的几个站点,所以这样写

TreeNode tn = new TreeNode();

tn.Text = 新浪网;

tn.NavigateUrl = "http://www.sina.com.cn";

tn.Target = "mainFr";

但是发现一个问题,所选中的树节点,不会选中效果

导航树

内嵌一个iframe name=” mainFr” 

然后自然想起用自定义样式,来解决这个问题,于是从网络上随便COPY了一段样式回来如下:

<asp:TreeView ID="TreeView1" runat="server" ShowLines="True">

                <SelectedNodeStyle BackColor="White" VerticalPadding="1px" BorderColor="#888888"

                    BorderStyle="Solid" BorderWidth="1px" HorizontalPadding="3px"></SelectedNodeStyle>

                <NodeStyle VerticalPadding="2px" Font-Names="Verdana" Font-Size="8pt" NodeSpacing="1px"

                    HorizontalPadding="5px" ForeColor="Black"></NodeStyle>

                <HoverNodeStyle BackColor="#CCCCCC" BorderColor="#888888" BorderStyle="Solid" BorderWidth="1px"

                    Font-Underline="True"></HoverNodeStyle>

            </asp:TreeView>

但结果你会发现只有鼠标移入移出有效果,点中是没有效果的,分析最后生成的HTML解析后的树节点如下:

 <table cellpadding="0" cellspacing="0" style="border-0;">

         <tr style="height:1px;">

              <td></td>

         </tr><tr>

              <td><img src="/pms2/WebResource.axd?d=NcGWj-qNqtl9MKe7hlPi6oqQI3MC5mSq6_3UjP0SAHw1&amp;t=633911118017187500" alt="" /></td><td class="TreeView1_2" onmouseover="TreeView_HoverNode(TreeView1_Data, this)" onmouseout="TreeView_UnhoverNode(this)" style="white-space:nowrap;"><a class="TreeView1_0 TreeView1_1" href="http://www.sina.com.cn" target="mainFr" onclick="javascript:TreeView_SelectNode(TreeView1_Data, this,'TreeView1t3');" id="TreeView1t3">3</a></td>

         </tr><tr style="height:1px;">

              <td></td>

         </tr>

     </table>

分析上面这段HTML,发现构成一个treenode对象是由<Td><a>标记来生成,看到这里,自然就想在<a> 加上一个自己的onclick客户端事件,点击这个<a>标签的时候能够变化树的当前选中样式,于是想到继承TreeNode对象,再AddAttribute("onclick", "tn_Click(this);");即可。

代码如下:

public class TreeNodeEx : TreeNode

    {

        protected override void RenderPreText(HtmlTextWriter writer)

        {

            writer.AddAttribute("onclick", " tn_Click(this);");

            base.RenderPreText(writer);

        }

    }

构造节点的时候代码如下:

TreeNodeEx  tn = new TreeNodeEx();

                tn.Text = 新浪网;

                tn.NavigateUrl = "http://www.sina.com.cn";

                tn.Target = "mainFr";

前台的JS代码如下:

tn_Click 函数

function tn_Click(obj)

{

            var ds = document.getElementById("TreeView1").getElementsByTagName("a");

            for(var i=0;i<ds.length;i++)

            {

                if(ds[i].className!="" && ds[i]!=obj)

                { 

                    //普通状态样式

                    ds[i].className="TreeView1_1";

                    //alert(ds[i].className);

                }

                else

                {

                    //选中的样式

                    obj.className = "TreeView1_1 TreeView1_5";

                }

            }

        }

 

原文地址:https://www.cnblogs.com/upshania/p/1661662.html