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;
        }

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