您的位置:首页 > 编程语言 > ASP

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

2010-02-02 12:22 489 查看

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-width:0;">

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

<td></td>

</tr><tr>

<td><img src="/pms2/WebResource.axd?d=NcGWj-qNqtl9MKe7hlPi6oqQI3MC5mSq6_3UjP0SAHw1&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";

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: