<script language="javascript"> function show(obj){ var clickedNode = MainTreeView.getTreeNode(obj.clickedNodeIndex); if (clickedNode==null) {} else{ var clickedNodeText = clickedNode.getAttribute("text"); var clickedNodeId = clickedNode.getAttribute("ID"); parent.document.frames(1).AreaSel(clickedNodeId); } } </script> <iewc:treeview id="MainTreeView" style="Z-INDEX: 101; LEFT: 0px; TOP: 0px" runat="server" Height="100%" width="100%" onclick="javascript:show(this);" ImageUrl=".\IMG\GraphBtn\+.bmp"></iewc:treeview>
''生成树的函数 Private Sub inittree(ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal parentId As Integer) Dim dv As New DataView() Dim dvrow As DataRowView Dim tmpNode As Microsoft.Web.UI.WebControls.TreeNode ''intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值 Dim intId As Integer dv.Table = mySet.Tables("paybasic") ''parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。 dv.RowFilter = "parentID=''" & parentId & "''" ''如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。 For Each dvrow In dv tmpNode = New Microsoft.Web.UI.WebControls.TreeNode() ''为当前节点的各个属性赋值。 tmpNode.ID = dvrow("nodeID") tmpNode.Text = dvrow("nodename") tmpNode.NavigateUrl = dvrow("Address") intId = dvrow("parentID") ''添加一个节点 Nds.Add(tmpNode) ''调用递归函数 inittree(Nds(Nds.Count - 1).Nodes, intId) Next End Sub ――――――――――――――――调用递归函数―――――――――――――――――― CreateReaderDataSet() inittree(Treepaybasic.Nodes, 999)
这样就只有你点击的节点更改的时候才提交!10.TreeView结合XML 把XML文件设置为如下格式,然后直接设置TreeNodeSrc为该XML文件就行 <?xml version="1.0" encoding="GB2312"?> <TREENODES> <TREENODE TEXT="node0" EXPANDED="true"> <TREENODE TEXT="node1"/> <TREENODE TEXT="node2"/> </TREENODE> <TREENODE TEXT="node3" NavigateURL="3.aspx"/> </TREENODES> 或者用代码 TreeView1.TreeNodeSrc="a.xml"; TreeView1.DataBind(); 客户端控制TreeView http://expert.csdn.net/Expert/topic/1382/1382892.xml1.设置所选节点,如选中第二个节点 function SetSelNode() { TreeView1.selectedNodeIndex="1"; }2.得到所选节点的Text,ID或NodeData function GetAttribute() { alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text")); } 替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData3.修改节点属性,如修改第一个节点的Text function ModifyNode() { var node=TreeView1.getTreeNode("0"); node.setAttribute("Text","hgknight"); }4.得到点击节点 function TreeView1.onclick() { alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text")); }5.添加节点 function AddNode() { var node=TreeView1.createTreeNode(); node.setAttribute("Text","hgknight"); TreeView1.add(node); }6.js遍历所有节点 var AllRootNode=new Array(); AllRootNode=TreeView1.getChildren(); AlertNode(AllRootNode); function AlertNode(NodeArray) { if(parseInt(NodeArray.length)==0) return; else { for(i=0;i<NodeArray.length;i++) { var cNode; cNode=NodeArray[i]; alert(cNode.getAttribute("Text")); if(parseInt(cNode.getChildren().length)!=0) AlertNode(cNode.getChildren()); } } }
给你一段代码参考://创建数据集 private DataSet CreateDataSet() { if(Session["Role"].ToString() == "Administrator") { strSql = "Select * From T_Navigation Order By ID,F_NodeName"; } else { strSql = "Select * From T_Navigation Where F_Role Like '%GeneralUser%' Order By ID,F_NodeName"; } aptNav = new SqlDataAdapter(strSql,connDB); dsNav = new DataSet(); aptNav.Fill(dsNav,"dtNavigate"); return dsNav;
//在这里写你的代码,也许你还要用到e.NewNode.ToString()和e.OldNode.ToString();来处理你要达到的目的,我没有写,但是你可以在这里由这两个属性来判断你的节点是哪个被点击了,我只能说到这了,END Sub这个事件是用户点击了TreeView 控件来改变活动节点时生成的,可以用这个事件控制格式并决定所选的节点内容,也可以写你的处理过程
再配上查询字符串不就搞定了!
我们做的是把结点信息都存在数据库中,包括NavigateUrl属性。
:我想要传递的参数时根据节点的名称然后到xml文件中去取的,所以用navigateurl行不通吧 不知道大家有何高见?
just like onclick event:
Page.RegisterStatupScript("open ","top.frames.frame('xxx').location='yyyyy'+'name of yyy'")
function show(obj){
var clickedNode = MainTreeView.getTreeNode(obj.clickedNodeIndex);
if (clickedNode==null) {}
else{
var clickedNodeText = clickedNode.getAttribute("text");
var clickedNodeId = clickedNode.getAttribute("ID");
parent.document.frames(1).AreaSel(clickedNodeId);
}
}
</script>
<iewc:treeview id="MainTreeView" style="Z-INDEX: 101; LEFT: 0px; TOP: 0px"
runat="server" Height="100%" width="100%" onclick="javascript:show(this);" ImageUrl=".\IMG\GraphBtn\+.bmp"></iewc:treeview>
Private Sub inittree(ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal parentId As Integer)
Dim dv As New DataView()
Dim dvrow As DataRowView
Dim tmpNode As Microsoft.Web.UI.WebControls.TreeNode
''intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值
Dim intId As Integer
dv.Table = mySet.Tables("paybasic")
''parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。
dv.RowFilter = "parentID=''" & parentId & "''"
''如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。
For Each dvrow In dv
tmpNode = New Microsoft.Web.UI.WebControls.TreeNode()
''为当前节点的各个属性赋值。
tmpNode.ID = dvrow("nodeID")
tmpNode.Text = dvrow("nodename")
tmpNode.NavigateUrl = dvrow("Address")
intId = dvrow("parentID")
''添加一个节点
Nds.Add(tmpNode)
''调用递归函数
inittree(Nds(Nds.Count - 1).Nodes, intId)
Next
End Sub
――――――――――――――――调用递归函数――――――――――――――――――
CreateReaderDataSet()
inittree(Treepaybasic.Nodes, 999)
给你个xml文件作例子
<?xml version="1.0" encoding="utf-8" ?>
<TREENODES>
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Baby Diary" NavigateURL="Pregnancy/Daily.aspx?flag=2" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Delivery Details" NavigateURL="Baby/DeliveryDetails.aspx" target="mainpage">
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Baby Observations" NavigateURL="Baby/Observations.aspx" target="mainpage" />
</TREENODE>
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Baby Outcomes" NavigateURL="Baby/BabyOutcomes.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Infant Feeding" NavigateURL="Baby/InfantFeeding.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Baby Medications" NavigateURL="Patient/MedicationList.aspx?FromTo=BAB" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-2.ico" TEXT="Complications" NavigateURL="fetal/BabyComplicationsIndex.aspx" target="mainpage" >
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Maternal Factors" NavigateURL="fetal/ComplicationsMaternal.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Birth Trauma" NavigateURL="fetal/ComplicationsBirthTrauma.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Respiratory and Cardiovascular" NavigateURL="fetal/ComplicationsRespiratory.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Infections" NavigateURL="fetal/ComplicationsInfections.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Haematological" NavigateURL="fetal/ComplicationsHaematological.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Endocrine and Metabolic" NavigateURL="fetal/ComplicationsEndocrineMetabolic.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Digestive System" NavigateURL="fetal/ComplicationsDigestive.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Temperature Regulation" NavigateURL="fetal/ComplicationsTemperature.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Other" NavigateURL="fetal/ComplicationsOther.aspx" target="mainpage" />
</TREENODE>
<TREENODE ImageUrl="images\newicon\t-2.ico" TEXT="Defects" NavigateURL="fetal/BabyDefectsIndex.aspx" target="mainpage" >
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Nervous System" NavigateURL="fetal/DefectsNervous.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Eye, Ear, Face and Neck" NavigateURL="fetal/DefectsHead.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Circulatory System" NavigateURL="fetal/DefectsCirculatory.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Respiratory System" NavigateURL="fetal/DefectsRespiratory.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Cleft Lip and Cleft Palate" NavigateURL="fetal/DefectsCleft.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Digestive System" NavigateURL="fetal/DefectsDigestive.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Genital Organs" NavigateURL="fetal/DefectsGenital.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Urinary System" NavigateURL="fetal/DefectsUrinary.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Musculoskeletal System" NavigateURL="fetal/DefectsMusculoskeletal.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Chromosomal" NavigateURL="fetal/DefectsChromosomal.aspx" target="mainpage" />
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Other" NavigateURL="fetal/DefectsOther.aspx" target="mainpage" />
</TREENODE>
<TREENODE ImageUrl="images\newicon\t-9.ico" TEXT="Baby Discharge" NavigateURL="Baby/BabyDischarged.aspx" target="mainpage" />
</TREENODES>
http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
下载后是后缀为bat的版本
(1)bulid.将bulid.bat的路径指向csc.exe所在路径,生成Microsoft.Web.UI.WebControls.dll。
(2)在wwwroot下创建空目录webctrl_client\1_0。
(3)将build\Runtime下的文件拷至webctrl_client\1_0下。
(4)选择工具箱的自定义工具箱,添加Microsoft.Web.UI.WebControls.dll。
有些麻烦
但如果你能找到后缀是msi的自动安装版本,直接下一步就行(我一直用这个版本,hoho)
安装后,通过“自定义工具箱”->“.net框架组件”把TreeView添加到工具箱里2.运行时无法显示
一般是TreeView的版本问题,最好下载英文版自动安装版本重新安装,安装前应该先到添加删除程序里卸掉原版本3.显示格式出错(非树状显示)
TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.04.框架里使用TreeView
设置NavigateUrl、Target属性,可更新另外的Frame5.找不到TreeNode类
使用TreeView,最好添加namespace:using Microsoft.Web.UI.WebControls;6.遍历TreeView节点(递归算法)
private void Page_Load(object sender, System.EventArgs e)
{
GetAllNodeText(TreeView1.Nodes);
}
void GetAllNodeText(TreeNodeCollection tnc)
{
foreach(TreeNode node in tnc)
{
if(node.Nodes.Count!=0)
GetAllNodeText(node.Nodes);
Response.Write(node.Text + " ");
}
}7.得到node结点的父节点
TreeNode pnode;
if(node.Parent is TreeNode)
pnode=(TreeNode)node.Parent;
else
//node is root node8.修改TreeView样式(示例)
<iewc:TreeView id="TreeView1" runat="server" HoverStyle="color:blue;background:#00ffCC;" DefaultStyle="background:red;color:yellow;" SelectedStyle="color:red;background:#00ff00;">
用代码:
TreeView1.DefaultStyle["font-size"] = "20pt";9.展开时不提交,改变选择节点时才提交
将autopostback设置成false;
在body里添加 <body onload="initTree()">
然后在PageLoad里写:
string strTreeName = "TreeView1";
string strRef = Page.GetPostBackEventReference(TreeView1);
string strScript = "<script language=\"JavaScript\"> \n" + "<!-- \n" + " function initTree() { \n" +" " + strTreeName + ".onSelectedIndexChange = function() { \n" + "if (event.oldTreeNodeIndex !=
event.newTreeNodeIndex) \n" + "this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); \n" + "window.setTimeout('" + strRef.Replace("'","file://'/") + "', 0, 'JavaScript'); \n" + " } \n" + " } \n" + "// --> \n" + "</script>";
Page.RegisterClientScriptBlock("InitTree",strScript );
这样就只有你点击的节点更改的时候才提交!10.TreeView结合XML
把XML文件设置为如下格式,然后直接设置TreeNodeSrc为该XML文件就行
<?xml version="1.0" encoding="GB2312"?>
<TREENODES>
<TREENODE TEXT="node0" EXPANDED="true">
<TREENODE TEXT="node1"/>
<TREENODE TEXT="node2"/>
</TREENODE>
<TREENODE TEXT="node3" NavigateURL="3.aspx"/>
</TREENODES>
或者用代码
TreeView1.TreeNodeSrc="a.xml";
TreeView1.DataBind(); 客户端控制TreeView
http://expert.csdn.net/Expert/topic/1382/1382892.xml1.设置所选节点,如选中第二个节点
function SetSelNode()
{
TreeView1.selectedNodeIndex="1";
}2.得到所选节点的Text,ID或NodeData
function GetAttribute()
{
alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));
}
替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData3.修改节点属性,如修改第一个节点的Text
function ModifyNode()
{
var node=TreeView1.getTreeNode("0");
node.setAttribute("Text","hgknight");
}4.得到点击节点
function TreeView1.onclick()
{
alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));
}5.添加节点
function AddNode()
{
var node=TreeView1.createTreeNode();
node.setAttribute("Text","hgknight");
TreeView1.add(node);
}6.js遍历所有节点
var AllRootNode=new Array();
AllRootNode=TreeView1.getChildren();
AlertNode(AllRootNode); function AlertNode(NodeArray)
{
if(parseInt(NodeArray.length)==0)
return;
else
{
for(i=0;i<NodeArray.length;i++)
{
var cNode;
cNode=NodeArray[i];
alert(cNode.getAttribute("Text"));
if(parseInt(cNode.getChildren().length)!=0)
AlertNode(cNode.getChildren());
}
}
}
private DataSet CreateDataSet()
{
if(Session["Role"].ToString() == "Administrator")
{
strSql = "Select * From T_Navigation Order By ID,F_NodeName";
}
else
{
strSql = "Select * From T_Navigation Where F_Role Like '%GeneralUser%' Order By ID,F_NodeName";
} aptNav = new SqlDataAdapter(strSql,connDB);
dsNav = new DataSet();
aptNav.Fill(dsNav,"dtNavigate");
return dsNav;
} //初始化导航树,通过递归调用显示子树
private void InitNavigationTree(TreeNodeCollection tncCurrent,string sParentID)
{
DataView dvw = new DataView();
TreeNode nodTemp;
string strTempID;
dvw.Table = dsNav.Tables["dtNavigate"];
dvw.RowFilter = "F_ParentID = '" + sParentID + "'";
foreach(DataRowView drv in dvw)
{
nodTemp = new TreeNode();
//nodTemp.CheckBox = true;
nodTemp.ID = drv["F_NodeID"].ToString();
nodTemp.Text = drv["F_NodeName"].ToString();
nodTemp.NavigateUrl = drv["F_NavigateUrl"].ToString();
nodTemp.ImageUrl = drv["F_ImageUrl"].ToString();
nodTemp.Target = "MainInterface"; tncCurrent.Add(nodTemp);
strTempID = drv["F_ParentID"].ToString();
//递归调用
InitNavigationTree(nodTemp.Nodes,nodTemp.ID);
}
}
using Microsoft.Web.UI.WebControls;
//创建根结点 0.
tvAdmi.Nodes[0].Text = "个人工作";
tvAdmi.Nodes[0].ID = "PersonalWork";
//创建子结点 0.0
TreeNode tvNode00 = new TreeNode();
tvNode00.Text = "个人日志";
tvNode00.ID = "PersonalLog";
tvNode00.NavigateUrl = "./PersonalWork/MainPer.htm";
tvNode00.Target = "rightframe";
this.tvAdmi.Nodes[0].Nodes.Add(tvNode00); //添加子结点
//创建子结点 0.1
TreeNode tvNode01 = new TreeNode();
tvNode01.Text = "修改密码";
tvNode01.ID = "UpdatePas";
tvNode01.NavigateUrl = "./PersonalWork/PasswordChange.aspx";
tvNode01.Target = "rightframe";
this.tvAdmi.Nodes[0].Nodes.Add(tvNode01); //添加子结点
//继续创建。
二、假如有两个权限One 、Two ,那就创建两个TreeViewOne 、TreeViewTwo (注意:在同一页面创建的树中,树的各个结点的ID不能重复!),如果是权限One则显示TreeOne ,否则显示TreeViewTwo !