TreeView With Node Hover

  

TreeView With Mouse Hover
 
文/黃忠成
 
 
此範例一樣是由未出版的[ASP.NET 3.5聖經] 中抽取出來的
目的是使用TreeView時,能於滑鼠移至某個Item時,顯示一段文字,
簡略的說,就是Hover的意思。
那這有何困難呢?困難之處在於TreeView本身並未提供這類功能,也
就是說TreeView從設計架構上就不支援這種做法。其實要達到這個效果
也不難,我們都知道,TreeView最終產生的是一群TR,TD的HTML碼,如果
能得到每個Node的TR、TD之HTML ID,那麼我們便可以透過JavaScript來Attath hover事件至該HTML Element上,最終結果便是滑鼠移到該Node上時,執行一
段JavaScript程式碼,也就是Hover
那麼,問題就是怎麼取得這個HTML ID了,以下的程式碼可以辦到,以Reflection呼叫TreeView私有函式。

protected void Page_PreRenderComplete(object sender, EventArgs e)
{
        PropertyInfo pi = typeof(TreeNode).GetProperty("Index",
BindingFlags .Instance | BindingFlags.NonPublic);
        foreach (TreeNode node in TreeView1.Nodes)
        {
            object index = pi.GetValue(node, null);             ClientScript.RegisterStartupScript(GetType(),
TreeView1.ClientID+"_"+index.ToString()+"_hook",
                  string.Format("hookEvent(document.getElementById('{0}'));", TreeView1.ClientID + "t" + index.ToString()),true);
        }
}

透過TreeNode私有的Index屬性,可以取得TreeNode的編號,搭配上TreeView的ClientID,便是TreeNode的ClientID,有了這個ID就能Attach 事件了。下面是完整的程式碼:

.aspx
<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
< html xmlns="http://www.w3.org/1999/xhtml">
< head runat="server">
    <title>Untitled Page</title>
    <script language=javascript>
   
    function hoverNode()
    {
       document.getElementById("Label1").innerHTML = event.srcElement.innerHTML;
    }
   
    function hookEvent(ctrl)
    {
       ctrl.attachEvent("onmouseover",hoverNode);
    }
   
    </script>
</ head >
< body >
    <form id="form1" runat="server">
         <div>
        <table>
        <tr>
        <td valign=top align=left>
            <asp:TreeView ID="TreeView1" runat="server">
                <Nodes>
                    <asp:TreeNode Text="Node1" Value="Node1"></asp:TreeNode>
                    <asp:TreeNode Text="Node2" Value="Node2"></asp:TreeNode>
                    <asp:TreeNode Text="Node3" Value="Node3"></asp:TreeNode>
                </Nodes>
            </asp:TreeView>
        </td>
        <td valign=top align=left>
            <asp:Label ID="Label1" runat=server />
        </td>
        </tr>
        </table>
        </div>
    </form>
</ body >
</ html >
 
.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Reflection;
 
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Page_PreRenderComplete(object sender, EventArgs e)
    {
        PropertyInfo pi = typeof(TreeNode).GetProperty("Index",
BindingFlags .Instance | BindingFlags.NonPublic);
        foreach (TreeNode node in TreeView1.Nodes)
        {
            object index = pi.GetValue(node, null);            ClientScript.RegisterStartupScript(GetType(),
TreeView1.ClientID+"_"+index.ToString()+"_hook",
              string.Format("hookEvent(document.getElementById('{0}'));",
TreeView1.ClientID + "t" + index.ToString()),true);
        }
    }
}

請注意!我使用了IE獨有的attachEvent來掛載事件,如果想在FireFox上正常運作,請改用addEventLister。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值