[DevExpress]TreeListLookUpEdit带checkbox之经典运用

上代码:

    public partial class TreeListLookUpEdit : DevExpress.XtraEditors.XtraForm
    {

        private string _KeyName;
        public string KeyName
        {
            get { return lblKeyName.Text; }
            set { lblKeyName.Text = value; }
        }
        private string _KeyID;

        public string KeyID
        {
            get { return lblKeyID.Text; }
            set { lblKeyID.Text= value; }
        }
        public TreeListLookUpEdit()
        {
            InitializeComponent();
        }
        private void TreeListLookUpEdit_Load(object sender, EventArgs e)
        {
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (DesignMode) return;
            txtRole.Properties.TreeList.OptionsView.ShowCheckBoxes = true;
            txtRoleBind();
            DefaultChecked("3");
            GetSelectedRoleIDandName();

            txtRole.Properties.TreeList.AfterCheckNode += (s, a) =>
            {
                a.Node.Selected = true;
                // txtRole.RefreshEditValue();
                // txtRole.ForceClosePopup();
                GetSelectedRoleIDandName();
            };

        }
        private void GetSelectedRoleIDandName() 
        {
            this.lstCheckedKeyID.Clear();
            this.lstCheckedKeyName.Clear();

            if (txtRole.Properties.TreeList.Nodes.Count > 0)
            {
                foreach (TreeListNode root in txtRole.Properties.TreeList.Nodes)
                {
                    GetCheckedKeyID(root);
                }
            }
            lblKeyID.Text = "";
            lblKeyName.Text = "";
            foreach (int id in lstCheckedKeyID)
            {
                KeyID += id + ",";
            }

            foreach (string name in lstCheckedKeyName)
            {
                KeyName += name + ",";
            }
        }
        private void DefaultChecked(string rid)
        {
            string strSql = " SELECT [MID] FROM [DZ].[dbo].[DZ_RoleMenu]   where RID=" + rid;
            DataTable dt = DbHelperSQL.Query(strSql).Tables[0];

            if (txtRole.Properties.TreeList.Nodes.Count > 0)
            {
                foreach (TreeListNode nd in txtRole.Properties.TreeList.Nodes)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        int checkedkeyid = int.Parse(dt.Rows[i][0].ToString());
                        if (txtRole.Properties.TreeList.FindNodeByKeyID(checkedkeyid) != null) 
                        {
                            txtRole.Properties.TreeList.FindNodeByKeyID(checkedkeyid).Checked = true;
                        }
                    }
                }
            }

        }
        private void txtRoleBind()
        {
            DZAMS.BLL.DZ_RoleInfo rf = new BLL.DZ_RoleInfo();
            string where = "1=1  order by PARENTID,ID ASC";
            DataTable tblDatas = rf.GetList(where).Tables[0];


            //设置字段 
            this.txtRole.Properties.TreeList.KeyFieldName = "ID";
            this.txtRole.Properties.TreeList.ParentFieldName = "PARENTID";
            this.txtRole.Properties.DataSource = tblDatas;

            this.txtRole.Properties.ValueMember = "ID";
            this.txtRole.Properties.DisplayMember = "NAME";
        }
        private List<int> lstCheckedKeyID = new List<int>();//选择局ID集合
        private List<string> lstCheckedKeyName = new List<string>();//选择局Name集合
        /// <summary>
        /// 获取选择状态的数据主键ID集合
        /// </summary>
        /// <param name="parentNode">父级节点</param>
        private void GetCheckedKeyID(TreeListNode parentNode)
        {
            if (parentNode.Nodes.Count == 0)
            {
                return;//递归终止
            }
            if (parentNode.CheckState != CheckState.Unchecked)
            {
                DataRowView drv = txtRole.Properties.TreeList.GetDataRecordByNode(parentNode) as DataRowView;
                if (drv != null)
                {
                    int KeyFieldName = (int)drv["ID"];
                    string DisplayMember = drv["NAME"].ToString();
                    if (!lstCheckedKeyID.Contains(KeyFieldName))
                    {
                        lstCheckedKeyID.Add(KeyFieldName);
                    }
                    if (!lstCheckedKeyName.Contains(DisplayMember))
                    {
                        lstCheckedKeyName.Add(DisplayMember);
                    }
                }
            }
            foreach (TreeListNode node in parentNode.Nodes)
            {
                if (node.CheckState != CheckState.Unchecked)
                {
                    DataRowView drv = txtRole.Properties.TreeList.GetDataRecordByNode(node) as DataRowView;//关键代码,就是不知道是这样获取数据而纠结了很久(鬼知道可以转换为DataRowView啊)
                    if (drv != null)
                    {
                        int KeyFieldName = (int)drv["ID"];
                        string DisplayMember = drv["Name"].ToString();
                        lstCheckedKeyID.Add(KeyFieldName);
                        lstCheckedKeyName.Add(DisplayMember);
                    }
                }
                GetCheckedKeyID(node);
            }

        }
   
        private void txtRole_Closed(object sender, DevExpress.XtraEditors.Controls.ClosedEventArgs e)
        {
        }

        void txtRole_CustomDisplayText(object sender, DevExpress.XtraEditors.Controls.CustomDisplayTextEventArgs e)
        {
            e.DisplayText = lblKeyName.Text;
        }
    }


你可能感兴趣的:([DevExpress]TreeListLookUpEdit带checkbox之经典运用)