zoukankan      html  css  js  c++  java
  • 分享:微软提供的一个开源控件treeview 的一小个用法

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

    记得前段时间在csdn上有网友问,如何取得treeview的当前选中结点的相关信息,当时稀里糊涂的答了,说什么得到选中结点的id后直接到后台数据库去取,今天也碰到这个问题,用那种思路行不通,呵呵,向那位老兄道歉,想来想去,觉得总不能没办法吧,后来发现取出的SelectedNodeIndex属性是这种样子“0.1.0”……,就想起在这上面是不是可以做点文章,果不其然,其实当前选中结点就是这样取得出来,比如SelectedNodeIndex为“0.1.0”的结点,其实就是tv.Nodes[0].Nodes[1].Nodes[0],呵呵,既然知道特性算法就很简单了,其实算法的关键部位也就是分析SelectedNodeIndex及根据它来控制循环,但是好象还没发现网上有同样的取法(也许是没仔细找,呵呵),下面是代码:
    //获取当前结点
            private Microsoft.Web.UI.WebControls.TreeNode GetSelectedNode(TreeView tv)
            
    {
                
    string strIndex = tv.SelectedNodeIndex;
                
                
    string[] strArray = strIndex.Split(new char[]{'.'});
                
                
    int iCount = strArray.Length;
                
                TreeNode tn 
    = tv.Nodes[Convert.ToInt32(strArray[0])];
                
                
    //注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时,
                
    //循环条件将不满足,不执行循环
                for (int i=1;i<=iCount-1;i++)
                
    {
                    tn 
    = GetNextNode(tn,strArray[i]);
                }


                
    return tn;
            }


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


                
    return tn;
            }


            
    private Microsoft.Web.UI.WebControls.TreeNode GetNextNode(TreeNode tn,string index)
            
    {
                
    int iIndex = Convert.ToInt32(index);
                
    return tn.Nodes[iIndex];
            }

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

    下面是个demo的代码及其效果图:
    private void btnGetInfo_Click(object sender, System.EventArgs e)
            
    {
                
    string strNodeInfo = string.Empty;

                
    //获取当前结点
                TreeNode tn = GetSelectedNode(tvDemo);

                strNodeInfo 
    += "当前结点的ID为  "+tn.ID+"   ";
                strNodeInfo 
    += "<br>当前结点的Text为“"+tn.Text+"";

                lCurrentInfo.Text 
    = strNodeInfo;
            }


            
    private void Button1_Click(object sender, System.EventArgs e)
            
    {
                
    string strNodeInfo = string.Empty;

                
    //获取当前结点
                TreeNode tn = GetSelectedNodeParent(tvDemo);

                strNodeInfo 
    += "当前结点父结点的ID为  "+tn.ID+"   ";
                strNodeInfo 
    += "<br>  当前结点父结点的Text为“"+tn.Text+"";

                lParentInfo.Text 
    = strNodeInfo;
            }



    其中结点的id结构为
    a
      a1
         a101
         a102
         a103
      a2
      a3
  • 相关阅读:
    POJ3094 UVALive3594 HDU2734 ZOJ2812 Quicksum【进制】
    UVALive5583 UVA562 Dividing coins
    POJ1979 HDU1312 Red and Black【DFS】
    POJ1979 HDU1312 Red and Black【DFS】
    POJ2386 Lake Counting【DFS】
    POJ2386 Lake Counting【DFS】
    HDU4394 Digital Square
    HDU4394 Digital Square
    UVA213 UVALive5152 Message Decoding
    UVA213 UVALive5152 Message Decoding
  • 原文地址:https://www.cnblogs.com/studio313/p/222924.html
Copyright © 2011-2022 走看看