TreeView.aspx<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<HTML>
<HEAD>
<title>TreeView控件右键菜单</title>
<style>
<!--
.skin 
{
cursor:default;
font:menutext;
position:absolute;
text-align:left;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
width:120px;
background-color:menu;
border:1 solid buttonface;
visibility:hidden;
border:2 outset buttonhighlight;
}
.menuitems 
{
padding-left:15px;
padding-right:10px;
}
-->
</style> 
</HEAD>
<body onclick="hideMenu()">
<form id="TreeView" method="post" runat="server">
<iewc:TreeView id="TreeView1" runat="server" ExpandLevel="3" HoverStyle="color:blue;background:#ffff00;">
<iewc:TreeNode Text="Node0" Expanded="True">
<iewc:TreeNode Text="Node3">
<iewc:TreeNode Text="Node5"></iewc:TreeNode>
<iewc:TreeNode Text="Node6"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode Text="Node4"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode Text="Node1" Expanded="True">
<iewc:TreeNode Text="Node7">
<iewc:TreeNode Text="Node8"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode Text="Node2" Expanded="True">
<iewc:TreeNode Text="Node9"></iewc:TreeNode>
<iewc:TreeNode Text="Node10">
<iewc:TreeNode Text="Node11"></iewc:TreeNode>
<iewc:TreeNode Text="Node12"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeView>
<div id="popupMenu" class="skin" onMouseover="highlighItem()" onMouseout="lowlightItem()" onClick="clickItem()">
<div class="menuitems" func="add">添加</div>
<hr>
<div class="menuitems" func="delete">删除</div>
<div class="menuitems" func="modify">修改</div>
</div>
</form>
<script language="javascript">
var menuskin = "skin";
var node = null; function hideMenu() 
{
popupMenu.style.visibility = "hidden";
} function highlighItem() 
{
if (event.srcElement.className == "menuitems") 
{
event.srcElement.style.backgroundColor = "highlight";
event.srcElement.style.color = "white";
}
} function lowlightItem() 
{
if (event.srcElement.className == "menuitems") 
{
event.srcElement.style.backgroundColor = "";
event.srcElement.style.color = "black";
window.status = "";
}
} function clickItem() 
{
if (event.srcElement.className == "menuitems") 
{
if(event.srcElement.getAttribute("func") == "add" && node != null)
{
var newNode=TreeView1.createTreeNode();
newNode.setAttribute("Text","new Node");
node.add(newNode);
}
else if (event.srcElement.getAttribute("func") == "delete" && node != null)
{
node.remove();
}
else if (event.srcElement.getAttribute("func") == "modify" && node != null)
{
node.setAttribute("Text","hgknight");
}
}
}

function TreeView1.oncontextmenu()
{
var nodeIndex = event.treeNodeIndex;
if (typeof(nodeIndex) == "undefined")
{
node = null;
return false;
}

node = TreeView1.getTreeNode(nodeIndex);

var rightedge = document.body.clientWidth-event.clientX;
var bottomedge = document.body.clientHeight-event.clientY;
if (rightedge <popupMenu.offsetWidth)
{
popupMenu.style.left = document.body.scrollLeft + event.clientX - popupMenu.offsetWidth;
}
else
{
popupMenu.style.left = document.body.scrollLeft + event.clientX;
}
if (bottomedge <popupMenu.offsetHeight)
{
popupMenu.style.top = document.body.scrollTop + event.clientY - popupMenu.offsetHeight;
}
else
{
popupMenu.style.top = document.body.scrollTop + event.clientY;
}
popupMenu.style.visibility = "visible";
return false;
}

</script>
</body>
</HTML>

解决方案 »

  1.   

    郑重申明  这个代码是转载 江雨.net  之 手 
      

  2.   

    to shenyisyn(魔法师):谢谢。但我要的是程序自动搜索,不是用鼠标去选择。
      

  3.   

    一、树的建立 具体方法是:创建一个数据库,设计树图信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDERSS、ICON字段,其它字段根据实际业务而定,节点名称NODENAME将在树型控件的节点上显示,NODEID字段保存节点的唯一标识号,PARENTID表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一个Web窗体其上放置TreeView控件。 
    Private Sub CreateDataSet()’建立数据集 
    Dim myConn As New SqlConnection() 
    Dim myCmd As New SqlCommand("select NODEID,NODENAME,PARENTID,ADDRESS,ICON from Tree_info", myConn) 
    Dim myDataAdapter As New SqlDataAdapter() 
    myConn.ConnectionString = Application("connectstring") 
    myCmd.CommandText = "" 
    myCmd.Connection = myConn 
    myDataAdapter.SelectCommand = myCmd 
    myDataAdapter.Fill(ds, "tree") 
    End Sub 
    建树的基本思路是:从根节点开始递归调用显示子树 
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    CreateDataSet() 
    intiTree(TreeView1.Nodes, 0) 
    End Sub 
    Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer) 
    Dim dv As New DataView() 
    Dim drv As DataRowView 
    Dim tmpNd As TreeNode 
    Dim intId As Integer 
    dv.Table = ds.Tables("tree") 
    dv.RowFilter = "PARENTID=’" & parentId & "’" 
    For Each drv In dv 
    tmpNd = New TreeNode() 
    strId = drv("NODE_ID") 
    tmpNd.ID = strId 
    tmpNd.Text = drv("NODE_NAME ") 
    tmpNd.ImageUrl = drv("ICON").ToString 
    Nds.Add(tmpNd) 
    intiTree(Nds(Nds.Count - 1).Nodes, intId) 
    Next 
    End Sub 二、增加、删除树节点 单纯在Treeview 上增加、删除、修改节点只需用Nodes属性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合与VS6.0中的区别,VS6.0中的是一个大的集合,而VS.NET中的是分层的每个Node下都有Nodes属性。增加、删除、修改树节点时与VS6.0相比有很大差别,特别是删除时。 
    Private Sub ButAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButAdd.Click’在选定的节点下添加子节点 
    Dim tmpNd As New TreeNode(), NdSel As TreeNode 
    tmpNd.ID = GetNewId() 
    NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)’选中的节点 
    tmpNd.Text = "新节点" 
    NdSel.Nodes.Add(tmpNd) 
    Dim myRow As DataRow 
    myRow = ds.Tables("tree").NewRow() 
    myRow("NODE_NAME") = tmpNd.ID 
    myRow("NODE_DESCRIPT") = "新节点" & tmpNd.ID & "_" & NdSel.ID 
    myRow("PARENT_NAME") = NdSel.ID 
    ds.Tables("tree").Rows.Add(myRow) 
    End Sub 
    Private Sub ButDele_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButDele.Click’删除选中的节点 
    Dim idx As String = TreeView1.SelectedNodeIndex() 
    GetNdCol(idx).Remove(TreeView1.GetNodeFromIndex(idx)) 
    Dim dv As New DataView(), recNo As Integer 
    dv.Table = ds.Tables("tree") 
    dv.RowFilter= "NODEID=" & NdId 
    dv.Delete(0) 
    End Sub 
    Private Function GetNdCol(ByVal idx As String) As TreeNodeCollection 
    ‘获得选中节点的父节点的Nodes集合 
    Dim cnt As Integer, i As Integer 
    Dim tmpNds As TreeNodeCollection 
    Dim idxs() As String 
    idxs = Split(idx, ".") 
    cnt = UBound(idxs) 
    If cnt = 0 Then 
    tmpNds = TreeView1.Nodes 
    Else 
    tmpNds = TreeView1.Nodes(CInt(idxs(0))).Nodes 
    For i = 1 To cnt - 1 
    tmpNds = tmpNds(CInt(idxs(i))).Nodes 
    Next 
    End If 
    Return tmpNds 
    End Function 
      

  4.   

    用代码在treeview web控件中,添加node的方法表字段:编号,父编号,名称
    数据:
    1   0   中华人民共和国
    2   1   湖南
    3   1   湖北        void  creattree(string  text,TreeNode tnd,string  pid)
            {            TreeNode  t2=new  TreeNode();
                t2.Text=text;            tnd.Nodes.Add(t2);生成
                string str1 ="父编号 = '"+pid+"'";
                DataRow[] dryl = dataSet31.Tables [0].Select(str1);            for(int  i=0;i<=dryl.GetUpperBound(0);i++)
                {creattree(dryl[i][2].ToString(),t2,dryl[i][0].ToString());
                }
            }
    //
                TreeNode  t1=new  TreeNode();
                t1.Text="地区信息";
                TreeView2.Nodes.Add(t1);            creattree("中华人民共和国",t1,"1");