小菜一碟——来,一起搞定MS的TREE!

jpyc 2004-03-25 09:36:50
总结了一下用MS的TREE控件的心得,大家一起来分享,当然,也不乏有其他网友的一些好的见解被录入其中,另有遗漏处请大家不吝赐教!

相信只要你仔细阅读了这篇小菜文,并参考一下提供的例程,一定能够掌握TREE的基本用法!

1.工欲善其事,必先利其器。首先保证装好你的组件,这个包安装非常方便,只要运行一下即可在VS.NET的工具栏中找到并使用了:
http://218.56.11.178:8018/FileDown.aspx?FID=4
也可以关注一下官方站是否有新版发布:
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp

2.常用的几个属性和方法
~Index 获取树节点在树节点集合中的位置。
~Nodes 获取分配给树视图控件的树节点集合。
~Parent 获取或设置控件的父容器。
~SelectedNode 获取或设置当前在树视图控件中选定的树节点。
~ExpandAll 展开所有树节点。
~Checked 获取或设置一个值,用以指示树节点是否处于选中状态。
~Text 获取或设置在树节点标签中显示的文本。
~Expand 展开树节点。
~Clear 清空树
~Remove 从树视图控件中移除当前树节点。
以上由其他网友总结,补充:
~Height 控件的高度
~Width 控件的宽度
~BackColor 背景颜色
~BorderColor 边框颜色
~BorderStyle 边框样式
~BorderWidth 边框宽度
~CssClass 应用于该控件的CSS类名
~ExpandedImageUrl 展开时显示的节点图标
~ImageUrl 未选择或展开是显示的节点图标
~SelectedImageUrl 选中状态下显示的节点图标
~Indent 缩进距离,只有在ShowLines设为TRUE时才生效。
~ShowLines 是否显示层级连接线
~ShowPlus 是否显示+/-符号按钮
~ShowToolTip 在有父节点上显示工具提示(+/-号的使用展开/关闭)。
~AccseeKey 控件使用的键盘快捷键
~AutoSelect 为TRUE时,当用键盘移动节点时,自动选择新节点
~AutoPostBack 当改变状态时,自动回存
~Enabled 控制控件的启用状态
~EnableViewState 控件是否自动保存其状态以用于往返行程
~ExpandLevel 初始化控件是展开节点的层数
~SelectExpands 当选中一个接点时,是否自动展开该节点
~TabIndex TAB键次序
~Visible 控件是否可见

3.实用技巧:
1)怎样点击文字(不是+/-号)即可展开(收缩)子节点
将TREE的ShowToolTip 属性设为false即可。

2)当鼠标指到某父接点时,如何不显示显示“节点名:user +/- to expand/collapse”
将TREE的SelectExpands 属性设为TRUE即可。

3)不显示树型的问题
首先:控件包没装好,使用上边介绍的控件包装一下试试。
其次:TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0

4)关于闪烁
将AutoPostBack属性设置为真,SelectedIndexChange才能被执行。不过这样的话刷新的很厉害。不要刷新的话,将AutoPostBack属性设置为FALSE.

5)如何实现用键盘上下左右键移动焦点时,自动选择新节点并执行新节点
将TREE的AutoSelect 属性设为TRUE即可。

6)不想显示+/-符号按钮怎么做?
将TREE的ShowPlus 属性设为False即可。

7)不想显示层级连接线怎么做?
将TREE的ShowLines 属性设为False即可。

8)如何设置节点旁的图标
~ExpandedImageUrl、ImageUrl、SelectedImageUrl这3个属性是控制图标的,选择自己喜欢的就OK了。

4.看看这个例子,对你一定有启发,是一棵无级树,不过在实际使用中可能会有些麻烦:
http://218.56.11.178:8018/FileDown.aspx?FID=246

5.这个论坛也使用了树(asp.net+C#+MSSQL 2000),并且代码开放,,如果觉得有参考价值,不妨装起来看看,其中还包含了其他一些常用的asp.net编程技巧,演示了TREE控件如何和数据库结合,动态显示库中的数据,这棵树只有两层,不过比较实用:
http://218.56.11.178:8018/FileDown.aspx?FID=212
其中:tree.aspx、tree.aspx.cs是TREE控件使用的主要部分。

论坛的实际应用演示地址,在这里:
http://expert.kaer.cn/
...全文
612 98 打赏 收藏 举报
写回复
用AI写文章
98 条回复
切换为时间正序
请发表友善的回复…
发表回复
googoo5100 2004-05-08
  • 打赏
  • 举报
回复
en

bucuo
xuyo 2004-04-02
  • 打赏
  • 举报
回复
good
linyoung 2004-04-01
  • 打赏
  • 举报
回复
up
jpyc 2004-04-01
  • 打赏
  • 举报
回复
等讨论完毕,再整理归档。
Azmore 2004-04-01
  • 打赏
  • 举报
回复
应该贴到文档里
jpyc 2004-04-01
  • 打赏
  • 举报
回复
TreeView使用集锦 hgknight(原作)

原来在论坛里发过专题帖子,只是由于帖子丢失原因,有些问题找不到了,同时这次也补充了一些,发到文档区以方便查询吧
原贴
http://expert.csdn.net/Expert/topic/1525/1525202.xml

1.下载地址
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.0

4.框架里使用TreeView
设置NavigateUrl、Target属性,可更新另外的Frame

5.找不到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 node

8.修改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("'","\\'") + "', 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.xml

1.设置所选节点,如选中第二个节点
function SetSelNode()
{
TreeView1.selectedNodeIndex="1";
}

2.得到所选节点的Text,ID或NodeData
function GetAttribute()
{
alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));
}
替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData

3.修改节点属性,如修改第一个节点的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());
}
}
}
xschenhao 2004-04-01
  • 打赏
  • 举报
回复
ding
emeibat 2004-04-01
  • 打赏
  • 举报
回复
mark 一下.
webdiyer 2004-04-01
  • 打赏
  • 举报
回复
怎么加不到精华区里去???
asp_love 2004-04-01
  • 打赏
  • 举报
回复
鄙人也贡献一点。

treeview中的客户端脚本与服务端结合。没时间具体写说明。


private void ControlCheckBox(TreeView corTreeview,string strTvKey,System.Web.UI.Control control)
{
StringBuilder strBuilder = new StringBuilder();
strBuilder.Append("<SCRIPT FOR = " + corTreeview.ClientID + " EVENT = oncheck>");
strBuilder.Append("var oTreeNode = " + corTreeview.ClientID + ".getTreeNode(" + corTreeview.ClientID + ".clickedNodeIndex);");
strBuilder.Append("CheckControl(oTreeNode,'theFirstChecked','" + control.ClientID + "')");
strBuilder.Append("</script>");
Page.RegisterStartupScript(strTvKey, strBuilder.ToString());
}
/// <summary>
///
/// </summary>
/// <param name="corTreeview"></param>
/// <param name="strTvKey"></param>
private void Tree_Click(TreeView corTreeview, string strTvKey,System.Web.UI.Control control)
{
StringBuilder strBuilder = new StringBuilder();
strBuilder.Append("<SCRIPT FOR = " + corTreeview.ClientID + " EVENT = onselectedindexchange>");
strBuilder.Append("var oTreeNode = " + corTreeview.ClientID + ".getTreeNode(" + corTreeview.ClientID + ".clickedNodeIndex);");
strBuilder.Append("DisplayMsg1(oTreeNode,'" + control.ClientID + "','');");
strBuilder.Append("</script>");
Page.RegisterStartupScript(strTvKey, strBuilder.ToString());
}
/// <summary>
///
/// </summary>
/// <param name="corTreeview"></param>
/// <param name="strTvKey"></param>
private void Tree_Hover(TreeView corTreeview, string strTvKey)
{
StringBuilder strBuilder = new StringBuilder();
strBuilder.Append("<SCRIPT FOR = " + corTreeview.ClientID + " EVENT = onhover>");
strBuilder.Append("var oTreeNode = " + corTreeview.ClientID + ".getTreeNode(window.event.treeNodeIndex);");
strBuilder.Append("TreeHover(oTreeNode);");
strBuilder.Append("</script>");
Page.RegisterStartupScript(strTvKey, strBuilder.ToString());
}

private void InitTree(ParmArrayWithOP sqlOPParm)
{
columnClassDataGrid = new BitSoft.shishiGov.Data.columnClass();
BitSoft.shishiGov.BussinessRule.columnClassRule myColumnClassRule=new columnClassRule();
myColumnClassRule.selectByArray(columnClassDataGrid,sqlOPParm);
TreeView1.Nodes.Clear();
createTree(TreeView1.Nodes,"0");
}







<script language="javascript">
<!--


function CheckControl(oTreeNode,x,tbIDBox1,tbIDBox2)
{
if(x=="theFirstChecked")
document.getElementById(tbIDBox1).value = oTreeNode.getAttribute("ID") + "*" + oTreeNode.getNodeIndex();

var oChildNodes = new Array();
oChildNodes = oTreeNode.getChildren();

if (oChildNodes.length != 0 && oTreeNode.getAttribute("checked"))
{
for(var i=0; i<oChildNodes.length; i++)
{
oChildNodes[i].setAttribute("checked","true");
CheckControl(oChildNodes[i],"");
}
}
else if (oChildNodes.length != 0 && !oTreeNode.getAttribute("checked"))
{
for(var i=0; i<oChildNodes.length; i++)
{
oChildNodes[i].setAttribute("checked","false");
CheckControl(oChildNodes[i],"");
}
}


}




function DisplayMsg(oTreeNode)
{
//document.getElementById("tbTreeNodeMsg").value = oTreeNode.getAttribute("Text");
}
function TreeHover(oTreeNode)
{
DisplayMsg(oTreeNode);
}

function DisplayMsg1(oTreeNode, tbIDBox, tbNodeTextBox)
{
if (oTreeNode.getAttribute("ID").substring(0,2) != "DC")
{
document.getElementById(tbIDBox).value = oTreeNode.getAttribute("ID") + "*" + oTreeNode.getNodeIndex();
document.getElementById("czfalg").value ="Tree";
document.Form1.submit();
}
}
function selectAll(allcheck)
{
if (allcheck.checked)
{
document.getElementById("add").checked = true;
document.getElementById("modify").checked = true;
document.getElementById("delete").checked = true;
document.getElementById("browse").checked = true;
document.getElementById("deptpublic").checked = true;
document.getElementById("govpublic").checked = true;
document.getElementById("buildItem").checked = true;
}
}
function cancel(checkPower)
{
if (!checkPower.checked)
{
document.getElementById("allcheck").checked = false;
}
}




function choice(oTreeNode,tbIDBox)
{
document.getElementById("TextBox4").value="";
getIdByCheckTree(oTreeNode,tbIDBox); //取得选中的id,赋值给textbox4;
if (document.getElementById("TextBox4").value=="")
{
alert("请在页面上方的树形图中选择要调整的栏目!");
return false;
}

}



function getIdByCheckTree(oTreeNode,tbIDBox) //取得选中的id
{

//alert('ds;ksd;a');

if(oTreeNode.getAttribute("checked"))
{
document.getElementById("TextBox4").value+=oTreeNode.getAttribute("ID");
}
var oChildNodes=new Array();
oChildNodes = oTreeNode.getChildren();

if (oChildNodes.length != 0 && !oTreeNode.getAttribute("checked"))
{
for(var i=0; i<oChildNodes.length; i++)
{
if (oChildNodes[i].getAttribute("checked"))
{
document.getElementById("TextBox4").value+=oChildNodes[i].getAttribute("ID")+"*"+oChildNodes[i].getAttribute("Text")+"@";
continue;
}
getIdByCheckTree(oChildNodes[i],"");
}
}

}
delphizd 2004-04-01
  • 打赏
  • 举报
回复
顶,好东西!·
webdiyer 2004-04-01
  • 打赏
  • 举报
回复
加精!
匆匆岁月 2004-04-01
  • 打赏
  • 举报
回复
mark一下:)
Bmonkey 2004-04-01
  • 打赏
  • 举报
回复
mark
chuanzai 2004-04-01
  • 打赏
  • 举报
回复
关注……
say1no2 2004-03-31
  • 打赏
  • 举报
回复
mark
ldz112 2004-03-31
  • 打赏
  • 举报
回复
mark
lingyunfeipu 2004-03-30
  • 打赏
  • 举报
回复
THANKS!
famousun 2004-03-30
  • 打赏
  • 举报
回复
好贴
谢谢楼主
jjstar 2004-03-30
  • 打赏
  • 举报
回复
mark
加载更多回复(78)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)内容概要:本文介绍了基于神经网络的数据驱动迭代学习控制(ILC)算法,旨在解决具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统中无人车的路径跟踪问题。该方法结合神经网络的学习能力与ILC的迭代优化机制,在无需精确系统模型的前提下,通过多次任务执行不断修正控制输入,以实现对期望轨迹的高精度跟踪。文章详细阐述了算法的设计原理、稳定性分析以及在无人车路径跟踪中的具体实现与仿真验证,展示了其在处理模型不确定性与提升跟踪精度方面的有效性。; 适合人群:具备自动控制、机器人或人工智能基础知识,从事无人车、自动化控制、智能系统研发的研究人员及工程师。; 使用场景及目标:①解决无人车在复杂环境下因系统模型未知或不精确导致的路径跟踪难题;②提升重复性作业中控制系统对理想轨迹的跟踪精度与鲁棒性;③为非线性、不确定性系统的先进控制策略设计提供理论参考与实践案例。; 阅读建议:建议读者结合Matlab代码实现进行学习,重点关注神经网络与ILC的融合机制、控制律的设计过程以及仿真结果的分析,以深入理解数据驱动方法在解决模型未知问题上的优势。
内容概要:本资源聚焦于分数阶系统(FOS)的Lyapunov指数谱计算,涵盖分数阶Lorenz系统、4D分数阶Chen系统和分数阶Duffing振荡器三种典型非线性动力学模型。通过提供完整的Matlab代码实现,系统介绍了分数阶微分方程的数值求解方法、李雅普诺夫指数谱的计算原理与算法流程,旨在帮助研究人员定量分析分数阶系统的混沌特性与动力学行为,为复杂系统的稳定性判定、分岔分析及混沌控制研究提供技术支撑。; 适合人群:具备一定动力系统与数值计算基础,从事非线性科学、混沌理论、分数阶微积分等相关领域研究的硕士、博士研究生及科研人员。; 使用场景及目标:① 学习和掌握分数阶微分方程的数值积分方法(如Adams-Bashforth-Moulton算法);② 深入理解Lyapunov指数谱的物理意义及其在判定系统混沌、稳定与周期运动中的应用;③ 利用提供的Matlab代码对特定分数阶系统进行动力学仿真与分析,复现经典结果或拓展至新的研究对象。; 阅读建议:此资源以Matlab代码为核心,强调理论与实践的紧密结合。使用者应在理解分数阶微积分基本理论和Lyapunov指数计算原理的基础上,仔细研读并调试所提供的代码,通过修改系统参数、初始条件等方式进行探究式学习,从而深化对分数阶系统复杂动力学行为的理解。
代码转载自:https://pan.quark.cn/s/447eda883a93 在本文中,我们将详细研究利用微控制器MSP430F5529来操控MPU6050传感器,并从其输出数据中推算出欧拉角。让我们来熟悉相关的主要构成部分。MSP430F5529是由德州仪器(TI)研发的一款16位超低功耗微控制器,它具备丰富的外部设备接口和强大的处理性能,非常适合多样化的嵌入式系统应用,尤其是传感器监控领域。MPU6050则是InvenSense公司推出的一款六轴惯性测量装置(IMU),该设备集成了三轴陀螺仪和三轴加速度计,能够检测设备的旋转状态和线性运动情况。 **一、MSP430F5529与MPU6050的连接** 1. **I2C通信协议**:MSP430F5529借助I2C总线与MPU6050进行数据交换。在I2C协议框架内,MSP430担任主设备角色,而MPU6050则扮演从设备角色。主设备负责控制数据传输过程,从设备则响应请求并传输数据。 2. **配置MPU6050**:在启动通信流程之前,必须设定MPU6050的工作模式、采样频率、满量程范围等参数。这一过程通常通过发送特定的I2C指令来完成。 3. **数据获取**:MPU6050的陀螺仪和加速度计数据通过I2C接口持续不断地或按需提供。微控制器周期性地读取这些数据,用以监控设备的动态变化情况。 **二、陀螺仪和加速度计原始数据解读** 1. **陀螺仪数据**:陀螺仪测量的是角速度,其单位通常是dps(度/秒)。该数据反映了设备围绕三个正交轴的旋转速度。 2. **加速度计数据**:加速度计测量的是线性加速度,其单位通常是g(重力加速度的倍数)。它能够感知设备在三个正交轴上的静态和动态加速度变化。...

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧