当前位置: 首页 > news >正文

分享:微软提供的一个开源控件treeview 的一小个用法

treeview --微软提供的一个开源控件,想必大家都用过,的确不错,但是有几个难以容忍的功能没有提供,今天就提其中一个;

记得前段时间在csdn上有网友问,如何取得treeview的当前选中结点的相关信息,当时稀里糊涂的答了,说什么得到选中结点的id后直接到后台数据库去取,今天也碰到这个问题,用那种思路行不通,呵呵,向那位老兄道歉,想来想去,觉得总不能没办法吧,后来发现取出的SelectedNodeIndex属性是这种样子“0.1.0”……,就想起在这上面是不是可以做点文章,果不其然,其实当前选中结点就是这样取得出来,比如SelectedNodeIndex为“0.1.0”的结点,其实就是tv.Nodes[0].Nodes[1].Nodes[0],呵呵,既然知道特性算法就很简单了,其实算法的关键部位也就是分析SelectedNodeIndex及根据它来控制循环,但是好象还没发现网上有同样的取法(也许是没仔细找,呵呵),下面是代码:

None.gif // 获取当前结点
None.gif
         private  Microsoft.Web.UI.WebControls.TreeNode GetSelectedNode(TreeView tv)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
string strIndex = tv.SelectedNodeIndex;
InBlock.gif            
ExpandedSubBlockStart.gifContractedSubBlock.gif            
string[] strArray = strIndex.Split(new char[]dot.gif{'.'});
InBlock.gif            
InBlock.gif            
int iCount = strArray.Length;
InBlock.gif            
InBlock.gif            TreeNode tn 
= tv.Nodes[Convert.ToInt32(strArray[0])];
InBlock.gif            
InBlock.gif            
//注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时,
InBlock.gif            
//循环条件将不满足,不执行循环
InBlock.gif
            for (int i=1;i<=iCount-1;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tn 
= GetNextNode(tn,strArray[i]);
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
return tn;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
// 获取当前结点的父结点,少往下跑一次不就得了?^_^
None.gif
         private  Microsoft.Web.UI.WebControls.TreeNode GetSelectedNodeParent(TreeView tv)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
string strIndex = tv.SelectedNodeIndex;
InBlock.gif            
ExpandedSubBlockStart.gifContractedSubBlock.gif            
string[] strArray = strIndex.Split(new char[]dot.gif{'.'});
InBlock.gif            
InBlock.gif            
int iCount = strArray.Length;
InBlock.gif            
InBlock.gif            TreeNode tn 
= tv.Nodes[Convert.ToInt32(strArray[0])];
InBlock.gif            
InBlock.gif            
//注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时,
InBlock.gif            
//循环条件将不满足,不执行循环
InBlock.gif
            for (int i=1;i<=iCount-2;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                tn 
= GetNextNode(tn,strArray[i]);
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
return tn;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
private  Microsoft.Web.UI.WebControls.TreeNode GetNextNode(TreeNode tn, string  index)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
int iIndex = Convert.ToInt32(index);
InBlock.gif            
return tn.Nodes[iIndex];
ExpandedBlockEnd.gif        }

既然都能取出当前结点来,那相关的什么信息不能出来呢?

下面是个demo的代码及其效果图:
None.gif private   void  btnGetInfo_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
string strNodeInfo = string.Empty;
InBlock.gif
InBlock.gif            
//获取当前结点
InBlock.gif
            TreeNode tn = GetSelectedNode(tvDemo);
InBlock.gif
InBlock.gif            strNodeInfo 
+= "当前结点的ID为  "+tn.ID+"   ";
InBlock.gif            strNodeInfo 
+= "<br>当前结点的Text为“"+tn.Text+"";
InBlock.gif
InBlock.gif            lCurrentInfo.Text 
= strNodeInfo;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   void  Button1_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
string strNodeInfo = string.Empty;
InBlock.gif
InBlock.gif            
//获取当前结点
InBlock.gif
            TreeNode tn = GetSelectedNodeParent(tvDemo);
InBlock.gif
InBlock.gif            strNodeInfo 
+= "当前结点父结点的ID为  "+tn.ID+"   ";
InBlock.gif            strNodeInfo 
+= "<br>  当前结点父结点的Text为“"+tn.Text+"";
InBlock.gif
InBlock.gif            lParentInfo.Text 
= strNodeInfo;
ExpandedBlockEnd.gif        }

TreeViewDemo.jpg

其中结点的id结构为
a
  a1
     a101
     a102
     a103
  a2
  a3

转载于:https://www.cnblogs.com/Hedonister/archive/2005/08/25/222848.html

相关文章:

  • com.panie 项目开发随笔(NoF)_环境搭建(2016.12.29)
  • 鲁棒的数据库持久层设计
  • java 线程 障碍器
  • 利用WSS做后台存储--设计一个统一的信息发布平台
  • Java foreach操作(遍历)数组
  • lduan server 2012 远程桌面网络高可用(二十三)
  • ASP.NET Theme/aspnet_regiis -ga/aspnet_regsql
  • easyUI中onLoadSuccess方法获取多个对象
  • signalr推送消息
  • 老鼠Atlas之旅(八):Hands-On Lab 4第四个实验,Atlas服务器控件自动完成
  • 使用hashids库混淆在url中与数据库相关的数字
  • 2005年互联网最具潜力奖
  • 腾讯财报不佳股价下挫 马化腾称SP业竞争激烈
  • Lua学习---Lua的控制结构
  • 被PQ点名了....
  • Consul Config 使用Git做版本控制的实现
  • Django 博客开发教程 16 - 统计文章阅读量
  • DOM的那些事
  • ECS应用管理最佳实践
  • Linux链接文件
  • Mocha测试初探
  • spring + angular 实现导出excel
  • Terraform入门 - 1. 安装Terraform
  • Vue组件定义
  • Yeoman_Bower_Grunt
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于Java中分层中遇到的一些问题
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 码农张的Bug人生 - 见面之礼
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前嗅ForeSpider教程:创建模板
  • 区块链分支循环
  • 深入浏览器事件循环的本质
  • #每日一题合集#牛客JZ23-JZ33
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (rabbitmq的高级特性)消息可靠性
  • (windows2012共享文件夹和防火墙设置
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .Net Memory Profiler的使用举例
  • .Net Web窗口页属性
  • .Net 代码性能 - (1)
  • .NET 分布式技术比较
  • .NET是什么
  • .NET运行机制
  • .NET中使用Redis (二)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /etc/motd and /etc/issue
  • :O)修改linux硬件时间
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @staticmethod和@classmethod的作用与区别
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法