分享:微软提供的一个开源控件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)
        private Microsoft.Web.UI.WebControls.TreeNode GetSelectedNode(TreeView tv) {
        { string strIndex = tv.SelectedNodeIndex;
            string strIndex = tv.SelectedNodeIndex; 
             string[] strArray = strIndex.Split(new char[]{'.'});
            string[] strArray = strIndex.Split(new char[]{'.'}); 
             int iCount = strArray.Length;
            int iCount = strArray.Length; 
             TreeNode tn = tv.Nodes[Convert.ToInt32(strArray[0])];
            TreeNode tn = tv.Nodes[Convert.ToInt32(strArray[0])]; 
             //注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时,
            //注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时, //循环条件将不满足,不执行循环
            //循环条件将不满足,不执行循环 for (int i=1;i<=iCount-1;i++)
            for (int i=1;i<=iCount-1;i++) {
            { tn = GetNextNode(tn,strArray[i]);
                tn = GetNextNode(tn,strArray[i]); }
            }
 return tn;
            return tn; }
        }
 //获取当前结点的父结点,少往下跑一次不就得了?^_^
        //获取当前结点的父结点,少往下跑一次不就得了?^_^ private Microsoft.Web.UI.WebControls.TreeNode GetSelectedNodeParent(TreeView tv)
        private Microsoft.Web.UI.WebControls.TreeNode GetSelectedNodeParent(TreeView tv) {
        { string strIndex = tv.SelectedNodeIndex;
            string strIndex = tv.SelectedNodeIndex; 
             string[] strArray = strIndex.Split(new char[]{'.'});
            string[] strArray = strIndex.Split(new char[]{'.'}); 
             int iCount = strArray.Length;
            int iCount = strArray.Length; 
             TreeNode tn = tv.Nodes[Convert.ToInt32(strArray[0])];
            TreeNode tn = tv.Nodes[Convert.ToInt32(strArray[0])]; 
             //注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时,
            //注意当选中接点刚好是根时(即SelectedNodeIndex=“0”)时, //循环条件将不满足,不执行循环
            //循环条件将不满足,不执行循环 for (int i=1;i<=iCount-2;i++)
            for (int i=1;i<=iCount-2;i++) {
            { tn = GetNextNode(tn,strArray[i]);
                tn = GetNextNode(tn,strArray[i]); }
            }
 return tn;
            return tn; }
        }
 private Microsoft.Web.UI.WebControls.TreeNode GetNextNode(TreeNode tn,string index)
        private Microsoft.Web.UI.WebControls.TreeNode GetNextNode(TreeNode tn,string index) {
        { int iIndex = Convert.ToInt32(index);
            int iIndex = Convert.ToInt32(index); return tn.Nodes[iIndex];
            return tn.Nodes[iIndex]; }
        }既然都能取出当前结点来,那相关的什么信息不能出来呢?
下面是个demo的代码及其效果图:
 private void btnGetInfo_Click(object sender, System.EventArgs e)
private void btnGetInfo_Click(object sender, System.EventArgs e) {
        { string strNodeInfo = string.Empty;
            string strNodeInfo = string.Empty;
 //获取当前结点
            //获取当前结点 TreeNode tn = GetSelectedNode(tvDemo);
            TreeNode tn = GetSelectedNode(tvDemo);
 strNodeInfo += "当前结点的ID为  "+tn.ID+"   ";
            strNodeInfo += "当前结点的ID为  "+tn.ID+"   "; strNodeInfo += "<br>当前结点的Text为“"+tn.Text+"”";
            strNodeInfo += "<br>当前结点的Text为“"+tn.Text+"”";
 lCurrentInfo.Text = strNodeInfo;
            lCurrentInfo.Text = strNodeInfo; }
        }
 private void Button1_Click(object sender, System.EventArgs e)
        private void Button1_Click(object sender, System.EventArgs e) {
        { string strNodeInfo = string.Empty;
            string strNodeInfo = string.Empty;
 //获取当前结点
            //获取当前结点 TreeNode tn = GetSelectedNodeParent(tvDemo);
            TreeNode tn = GetSelectedNodeParent(tvDemo);
 strNodeInfo += "当前结点父结点的ID为  "+tn.ID+"   ";
            strNodeInfo += "当前结点父结点的ID为  "+tn.ID+"   "; strNodeInfo += "<br>  当前结点父结点的Text为“"+tn.Text+"”";
            strNodeInfo += "<br>  当前结点父结点的Text为“"+tn.Text+"”";
 lParentInfo.Text = strNodeInfo;
            lParentInfo.Text = strNodeInfo; }
        }
其中结点的id结构为
a
a1
a101
a102
a103
a2
a3
 
                    
                     
                    
                 
                    
                 
        
 
             
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号