treeview加载数据以及gridview双击时加载treeview是否选中,留个脚印

private void PowerManager_Load(object sender, EventArgs e)
        {
            //加载数据到treeview里面
            DataTable dtb = bluser.GetUser();
            rgvuserinfo.DataSource = dtb;
            DataTable dt = bll.GetParentNode(0);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                RadTreeNode node = new RadTreeNode();
                node.Text = dt.Rows[i][0].ToString();
                node.Value = dt.Rows[i][1].ToString();
                powerTv.Nodes.Add(node);
                AddNodes(node);
            }

        }
        //添加根据父节点添加子节点 方法名第一个字大写! 
        public void AddNodes(RadTreeNode pnode)
        {
            int cc=Convert.ToInt32(pnode.Value)+1;
            DataTable dt = bll.GetParentNode(cc);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                RadTreeNode node = new RadTreeNode();
                node.Text = dt.Rows[i][0].ToString();
                node.Value = dt.Rows[i][1].ToString();
                pnode.Nodes.Add(node);
                AddNodes(node); //迭代把所有的子节点都加载出来
            }
        }

        private void radButton2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //双击选择框的内容触发
        private void rgvuserinfo_DoubleClick(object sender, EventArgs e)
        {
            //node.Value 存的是顺序
            string PowerGroup = rgvuserinfo.SelectedRows[0].Cells[3].Value.ToString();
            string[] Groups = PowerGroup.Split(','); //Groups[i]存的是是否选中

            //我先获得控件中所有的节点, nodes
            List<RadTreeNode> nodes = GetAllNodes(powerTv.Nodes);
            //在进入新的选择的时候先清除所有以选择的
            foreach (RadTreeNode item in nodes)
            {
                item.Checked = false;
            }
            //然后重新选择
            foreach (RadTreeNode item in nodes)
            {

                for (int i = 0; i < Groups.Length; i++)
                {
                    if (item.Value.ToString() == i.ToString()) //当我顺序匹配的时候
                    {
                        //Groups[i]存的值 == 1的时候,我设置为true. else is false!
                        item.Checked = (Groups[i] == "1");
                    }
                }
            }  
        }
        List<RadTreeNode> nodes = new List<RadTreeNode>(); //用来保存节点的集合
        private void radButton1_Click(object sender, EventArgs e)
        {
            //保存,获得选中的值,按顺序获得节点上面选择菜单的值  将泛型转换成Linq类型  并且去除重复
            IQueryable<RadTreeNode> nodes = GetAllNodes(powerTv.Nodes).Distinct().AsQueryable();
            //转换成IQueryable对象,然后再通过指定的列排序
            nodes = nodes.OrderBy(c => int.Parse(c.Value.ToString()));
            string values="";
            foreach (RadTreeNode item in nodes)
	        {
		        values+=(item.Checked ? "1" : "0") + ",";
	        }
            values=values.Trim(',');
            MessageBox.Show(values);
        }
        
        /// <summary>
        /// 获得控件上所有的节点子节点
        /// </summary>
        /// <param name="parentNode">节点集合,第一次为powerTv.Nodes</param>
        /// <returns></returns>
        private List<RadTreeNode> GetAllNodes(RadTreeNodeCollection parentNode)
        {
            if (parentNode != null)
            {
                foreach (RadTreeNode item in parentNode) //遍历当前节点,添加之后获得子节点继续添加遍历
                {
                    nodes.Add(item); //添加第一层,二层,三层,四层....
                    GetAllNodes(item.Nodes); //调用本方法,迭代!循环获得所有的子节点。N层都可以
                }
            }
            return nodes;
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章