XtraTreeList操作

设置带checkbox的XtraTreeList:

this.treeList1.OptionsView.ShowCheckBoxes = true;           //是否显示CheckBox


绑定数据:

    DataTable tblmenu = new DataTable("tblmenu");
            tblmenu.Columns.Add("Id", typeof(int));
            tblmenu.Columns.Add("MenuName", typeof(string));
            tblmenu.Columns.Add("PId", typeof(int));


            DataRow newRow1 = tblmenu.NewRow();
            newRow1["Id"] = "1";
            newRow1["MenuName"] = "系统管理";
            newRow1["PId"] = "0";
            tblmenu.Rows.Add(newRow1);
            //------------------------------
            DataRow newRow2 = tblmenu.NewRow();
            newRow2["Id"] = "2";
            newRow2["MenuName"] = "用户管理";
            newRow2["PId"] = "1";
            tblmenu.Rows.Add(newRow2);


            DataRow newRow3 = tblmenu.NewRow();
            newRow3["Id"] = "3";
            newRow3["MenuName"] = "权限设置";
            newRow3["PId"] = "1";
            tblmenu.Rows.Add(newRow3);


            DataRow newRow4 = tblmenu.NewRow();
            newRow4["Id"] = "4";
            newRow4["MenuName"] = "角色管理";
            newRow4["PId"] = "1";
            tblmenu.Rows.Add(newRow4);


            DataRow newRow5 = tblmenu.NewRow();
            newRow5["Id"] = "5";
            newRow5["MenuName"] = "修改密码";
            newRow5["PId"] = "1";
            tblmenu.Rows.Add(newRow5);


         /*******************************************************************/
            DataRow newRow11 = tblmenu.NewRow();
            newRow11["Id"] = "11";
            newRow11["MenuName"] = "业务管理";
            newRow11["PId"] = "0";
            tblmenu.Rows.Add(newRow11);



            this.treeList1.DataSource = tblmenu;
            this.treeList1.PopulateColumns();  //初始化列
            this.treeList1.Columns[0].Visible = false;  //隐藏某列
            this.treeList1.Columns[1].Caption = "菜单名称";
            this.treeList1.Columns[1].OptionsColumn.AllowEdit = false;  //设置某列可编辑性
            this.treeList1.Columns[2].Visible = false;
            this.treeList1.ExpandAll();  //展开所有



选中父节点时同时选中全部子节点。  取消某个子节点时,取消父节点的全部选中状态。

  /// <summary>
        /// 设置子节点的状态
        /// </summary>
        /// <param name="node"></param>
        /// <param name="check"></param>
        private void SetCheckedChildNodes(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(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);
            }
        }


      //处理选中事件

       private void treeList1_AfterCheckNode(object sender, SupSuite.XtraTreeList.NodeEventArgs e)
        {
            SetCheckedChildNodes(e.Node,e.Node.CheckState);
            SetCheckedParentNodes(e.Node, e.Node.CheckState);
        }

 

 

//获取选中List

 private List<int> lstCheckedOfficeID = new List<int>();//选择局ID集合
/// <summary>
/// 获取选择状态的数据主键ID集合
/// </summary>

/// <param name="parentNode">父级节点</param>
private void GetCheckedOfficeID(TreeListNode parentNode)
{
if (parentNode.Nodes.Count == 0
)
{
return;//递归终止

}

foreach (TreeListNode node in
parentNode.Nodes)
{
if (node.CheckState ==
CheckState.Checked)
{
DataRowView drv
= tlOffice.GetDataRecordByNode(node) as DataRowView;//关键代码,就是不知道是这样获取数据而纠结了很久(鬼知道可以转换为DataRowView啊)

if (drv != null)
{
int OfficeID = (int)drv["OfficeID"
];
lstCheckedOfficeID.Add(OfficeID);
}


}
GetCheckedOfficeID(node);
}
}


你可能感兴趣的:(XtraTreeList操作)