TreeList的相關設置和操作

因爲經常要使用到TreeList,查詢的內容也是反反覆覆,把經常用到的相關代碼整理了一下

  • 綁定數據源:

指定DataSource爲對應 的DataTable,指定KeyFieldName爲表主鍵字段,ParentFieldName爲表指向主鍵的外鍵字段名

            
            DataTable dtSourceData = new DataTable();//或者從數據庫中獲取
            treeList1.DataSource = dtSourceData ;
            treeList1.KeyFieldName = "id";
            treeList1.ParentFieldName = "pid";
            treeList1.BestFitColumns();
            this.treeList1.ExpandAll();
  • 設置選擇框
        treeList1.OptionsView.ShowCheckBoxes = true;
  • 如何隱藏TreeList的列頭

   設置TreeListr的OptionsView的ShowColumns屬性爲:False

 

  • 設置父子節點全選狀態:
        /// <summary>
        /// 設置子節點的狀態
        /// </summary>
        /// <param name="node"></param>
        /// <param name="check"></param>
        private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
        {
            for (int i = 0; i < node.Nodes.Count; i++)
            {
                node.Nodes[i].CheckState = check;
                SetCheckedChildNodes(node.Nodes[i], check);
            }
        }

        /// <summary>
        /// 設置父節點的狀態
        /// </summary>
        /// <param name="node"></param>
        /// <param name="check"></param>
        private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)
        {
            if (node.ParentNode != null)
            {
                bool b = false;
                CheckState state;
                for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
                {
                    state = (CheckState)node.ParentNode.Nodes[i].CheckState;
                    if (!check.Equals(state))
                    {
                        b = !b;
                        break;
                    }
                }
                node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;
                SetCheckedParentNodes(node.ParentNode, check);
            }
        }

上面的兩個方法在TreeList_AfterCheckNode裏面觸發:

        private void treeDatacheckItem_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
        {
            SetCheckedChildNodes(e.Node, e.Node.CheckState);
            SetCheckedParentNodes(e.Node, e.Node.CheckState);
        }
  • 獲取選擇的子節點、父節點
        List<string> lstPID = new List<string>();
        List<string> lstCID = new List<string>();
        /// <summary>
        /// 獲取treelist勾選的節點(區分子節點和父節點)
        /// </summary>
        private void RecursionNodes(TreeListNodes Nodes)
        {
            foreach (TreeListNode node in Nodes)
            {
                //// 如果當前節點下還包括子節點,調用遞歸
                if (node.Nodes.Count > 0)
                {
                    //節點的選中狀態Indeterminate(一般爲父節點的狀態,當父節點下有子節點勾選,但父節點沒有被勾選是節點爲改狀態)
                    if (node.CheckState == CheckState.Indeterminate)
                    {
                        //關鍵:轉換爲DataRowView可以得到節點屬性值
                        DataRowView drv = treeDatacheckItem.GetDataRecordByNode(node) as DataRowView;
                        if (drv != null)
                        {
                            string id = drv["id"].ToString();
                            lstPID.Add(id);//根據判斷選中是否添加該節點
                        }
                        RecursionNodes(node.Nodes);
                    }
                    if (node.CheckState == CheckState.Checked)
                    {
                        DataRowView drv = treeDatacheckItem.GetDataRecordByNode(node) as DataRowView;
                        if (drv != null)
                        {
                            string id = drv["id"].ToString();
                            lstPID.Add(id);
                        }
                        RecursionNodes(node.Nodes);
                    }
                }
                else
                {
                    if (node.CheckState == CheckState.Checked)
                    {
                        DataRowView drv = treeDatacheckItem.GetDataRecordByNode(node) as DataRowView;
                        if (drv != null)
                        {
                            string id = drv["id"].ToString();
                            lstCID.Add(id);
                        }
                    }
                    // 也可以設置節點的值
                    node.SetValue(1, "Hello World!");
                }
            }
        }
  • 定位到某一節點
         TreeListNode pFocusNode = this.treeList1.FindNodeByID(int.Parse("ID"));
                //TreeListNode pFocusNode2 = this.treeList1.FindNodeByFieldValue("字段名","字段值");
                //TreeListNode pFocusNode3 = this.treeList1.FindNodeByKeyID("綁定的keyID");
                treeList1.FocusedNode = pFocusNode;

 

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