分享:微软提供的一个开源控件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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值