private void btnSaveMenu_Click(object sender, EventArgs e)
        {
            int groupID = (int)((ATH_ROLE)cbxRole2.SelectedItem).GROUP_ID;
            db.Execute("delete ATH_CONTROL_ENABLE where group_id = @0 and control_type =1" , new object[] { groupID });
            List<ATH_MAINMENU> lstMenu = db.Fetch<ATH_MAINMENU>("");
            for (int i = 0; i < lstMenu.Count; i++)
            {
                var o = tvMenu.Nodes.Find(lstMenu[i].ITEMNAME, true)[0];
                if (!o.Checked)
                {
                    ATH_CONTROL_ENABLE ctlEnable = new ATH_CONTROL_ENABLE();
                    ctlEnable.GROUP_ID = groupID;
                    ctlEnable.CONTROL_NAME = lstMenu[i].ITEMNAME;
                    ctlEnable.CONTROL_CAPTION = lstMenu[i].ITEMCAPTION;
                    ctlEnable.ENABLE = 0;
                    ctlEnable.CONTROL_TYPE = 1;

                    ctlEnable.Insert();
                }
            }

            // 导航设置
            if (bindingSource1.DataSource == null)
                return;

            dataGridView1.EndEdit();
            aTHCONTROLENABLEBindingSource.EndEdit();
            aTHCONTROLENABLEBindingSource.CurrencyManager.EndCurrentEdit();

            var oNav = ((List<ATH_CONTROL_ENABLE>)bindingSource1.DataSource);
            for (int i = 0; i < oNav.Count; i++)
            {
                if (oNav[i].IsNew())
                    oNav[i].Insert();
                else if (oNav[i].NeedDelete)
                    oNav[i].Delete();
                else
                    oNav[i].Update();
            }
        }
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Level == 0)
            {
                aTHCONTROLENABLEBindingSource.DataSource = null;
                return;
            }

            int groupID = (int)((ATH_ROLE)cbxRole1.SelectedItem).GROUP_ID;
            List<ATH_FORMBUTTON> lstBtn = db.Fetch<ATH_FORMBUTTON>(" where FATHERITEM = @0", new object[]{e.Node.Tag.ToString()});
            List<ATH_CONTROL_ENABLE> lstCtrlEnable = db.Fetch<ATH_CONTROL_ENABLE>("where group_id = @0 and FATHERITEM = @1", new object[] { groupID, e.Node.Tag.ToString() });

            for (int i = 0; i < lstBtn.Count; i++)
            {
                var o = lstCtrlEnable.Where(d => d.CONTROL_NAME == lstBtn[i].ITEMNAME);
                if (o.Count() == 0)
                {
                    ATH_CONTROL_ENABLE ctrlEnable = new ATH_CONTROL_ENABLE();
                    ctrlEnable.GROUP_ID = groupID;
                    ctrlEnable.CONTROL_NAME = lstBtn[i].ITEMNAME;
                    ctrlEnable.CONTROL_CAPTION = lstBtn[i].ITEMCAPTION;
                    ctrlEnable.FATHERITEM = lstBtn[i].FATHERITEM;
                    ctrlEnable.CONTROL_TYPE = 0;
                    //ctrlEnable.isNew = true;
                    ctrlEnable.ENABLE = Convert.ToInt32(false);

                    lstCtrlEnable.Add(ctrlEnable);
                }
            }

            // 预删除已不存在的控件授权
            for (int i = 0; i < lstCtrlEnable.Count; i++)
            {
                var o = lstBtn.Where(d => d.ITEMNAME == lstCtrlEnable[i].CONTROL_NAME);
                if (o.Count() == 0)
                {
                    lstCtrlEnable[i].NeedDelete = true;
                }
            }

            aTHCONTROLENABLEBindingSource.DataSource = lstCtrlEnable;
        }
        private void btnRefreshMenu_Click(object sender, EventArgs e)
        {
            tvMenu.Nodes.Clear();
            int groupID = (int)((ATH_ROLE)cbxRole2.SelectedItem).GROUP_ID;

            List<ATH_MAINMENU> lstMenu = db.Fetch<ATH_MAINMENU>("where FATHERITEM = '0'");
            TreeNode root = new TreeNode("菜单项");
            root.Name = "root";

            for (int i = 0; i < lstMenu.Count; i++)
            {
                TreeNode td = new TreeNode(lstMenu[i].ITEMCAPTION);
                td.Name = lstMenu[i].ITEMNAME;
                td.Tag = lstMenu[i].ITEMNAME;
                root.Nodes.Add(td);
                GetAllMenu(td, lstMenu[i].ITEMNAME);
            }
            tvMenu.Nodes.Add(root);
            tvMenu.ExpandAll();

            // 选中所有节点
            btnSelectAllMenu_Click(null, null);

            // 获取数据库中的权限记录, 取消选中Enable=0的节点
            lstMenu = db.Fetch<ATH_MAINMENU>("");
            for (int i = 0; i < lstMenu.Count; i++)
            {
                if (lstMenu[i].ITEMNAME == "barButtonItem14")
                {
                }
                TreeNode td = tvMenu.Nodes.Find(lstMenu[i].ITEMNAME, true)[0];
                List<ATH_CONTROL_ENABLE> ctrlEnable = db.Fetch<ATH_CONTROL_ENABLE>("where GROUP_ID = @0 and CONTROL_NAME = @1 and CONTROL_TYPE = 1 and ENABLE = 0",
                    new object[] { groupID, lstMenu[i].ITEMNAME });
                if (ctrlEnable.Count == 1 && ctrlEnable[0].ENABLE == 0)
                    td.Checked = false;
            }

            // 导航栏元素全能设置
            List<ATH_NAVGATIONITEM> lstBtn = db.Fetch<ATH_NAVGATIONITEM>("");
            List<ATH_CONTROL_ENABLE> lstCtrlEnable = db.Fetch<ATH_CONTROL_ENABLE>("where group_id = @0 and control_type = 2", groupID);

            for (int i = 0; i < lstBtn.Count; i++)
            {
                var o = lstCtrlEnable.Where(d => d.CONTROL_NAME == lstBtn[i].ITEMNAME);
                if (o.Count() == 0)
                {
                    ATH_CONTROL_ENABLE ctrlEnable = new ATH_CONTROL_ENABLE();
                    ctrlEnable.GROUP_ID = groupID;
                    ctrlEnable.CONTROL_NAME = lstBtn[i].ITEMNAME;
                    ctrlEnable.CONTROL_CAPTION = lstBtn[i].ITEMCAPTION;
                    ctrlEnable.CONTROL_TYPE = 2;
                    //ctrlEnable.isNew = true;
                    ctrlEnable.ENABLE = Convert.ToInt32(false);

                    lstCtrlEnable.Add(ctrlEnable);
                }
            }

            // 预删除已不存在的控件授权
            for (int i = 0; i < lstCtrlEnable.Count; i++)
            {
                var o = lstBtn.Where(d => d.ITEMNAME == lstCtrlEnable[i].CONTROL_NAME);
                if (o.Count() == 0)
                {
                    lstCtrlEnable[i].NeedDelete = true;
                }
            }

            bindingSource1.DataSource = lstCtrlEnable;
        }