using Core.Mes.Client.Comm.Control; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; using CoreFS.CA06; using Infragistics.Win.UltraWinGrid; using Infragistics.Win.UltraWinTree; using System; using System.Collections; using System.Data; using System.Drawing; using System.Windows.Forms; namespace Core.StlMes.Client.Qcm { public partial class FrmPermissionConfigure : FrmBase { public FrmPermissionConfigure() { InitializeComponent(); ExceptionHelper.RegistException(); } public override void ToolBar_Click(object sender, string ToolbarKey) { switch (ToolbarKey) { case "doQuery": doQuery(); break; case "doSave": doSave(); break; case "Close": this.Close(); break; } } /// /// 树节点选中事件触发时,存储父节点id,防止当父节点选中项转移到其他焦点时,无法获取数据。 /// private static string parentCode = ""; /// /// 用于修改时验证重复项 /// private static string VName = ""; /// /// 查找具体的tag /// /// /// /// private void FindTreeNodeFromTag(TreeNode trnode, string treeTag, ref ArrayList treelist) { if (trnode.Tag != null && trnode.Tag.ToString() == treeTag) { treelist.Add(trnode); } foreach (TreeNode anode in trnode.Nodes) { FindTreeNodeFromTag(anode, treeTag, ref treelist); } } /// /// 刷新操作 /// private void doQuery() { this.dataTable1.Clear(); DataTable dt = new DataTable(); dt = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.doQuery", new Object[] { utName.Text }, this.ob); GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable1, true); //内容自适应 GridHelper.RefreshAndAutoSizeExceptRows(ultraGrid1, new UltraGridColumn[] { ultraGrid1.DisplayLayout.Bands[0].Columns["REMARK"] }); } /// /// 刷新操作 /// private void QueryUserInfo() { this.dataTable2.Clear(); if (ultraGrid1.ActiveRow == null) return; DataTable dt = new DataTable(); dt = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.QueryUserInfo", new Object[] { ultraGrid1.ActiveRow.Cells["ID"].Text }, this.ob); GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable2, true); GridHelper.RefreshAndAutoSize(ultraGrid2); } /// /// 保存 /// private void doSave() { if (ultraGrid1.ActiveRow == null) { MessageUtil.ShowTips("请选中需要保存的角色信息"); return; } ArrayList parm = new ArrayList(); getTreeAllInfo(treeView1.Nodes, parm); CoreClientParam ccp = new CoreClientParam(); ccp.ServerName = "com.steering.pss.qcm.CorePermissionConfigure"; ccp.MethodName = "doSave"; ccp.ServerParams = new object[] { ultraGrid1.ActiveRow.Cells["ID"].Text, UserInfo.GetUserID(), UserInfo.GetUserName(), parm }; ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp != null) { if (ccp.ReturnCode == -1) { MessageUtil.ShowWarning(ccp.ReturnInfo); return; } } else { return; } MessageUtil.ShowTips("保存成功"); bandTreeView(); } public void getTreeAllInfo(TreeNodesCollection tnc, ArrayList parm) { foreach (UltraTreeNode node in tnc) { if (node.CheckedState == CheckState.Checked || node.CheckedState == CheckState.Indeterminate) parm.Add(node.Tag); if (node.Nodes.Count > 0) { getTreeAllInfo(node.Nodes, parm); } } } public void checkByList(TreeNodesCollection tnc, ArrayList parm) { foreach (UltraTreeNode node in tnc) { if (node.Nodes.Count > 0) { checkByList(node.Nodes, parm); } else { if (parm.Contains(node.Tag)) { node.CheckedState = CheckState.Checked; setparent(node); } } } } /// /// 树控件绑定数据源 /// public void bandTreeView() { treeView1.Nodes.Clear(); DataTable dt = new DataTable(); dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMenuzConfigure.getTreeData", new Object[] { }, this.ob); ArrayList list = new ArrayList(); if (ultraGrid1.ActiveRow != null) { DataTable dt1 = new DataTable(); dt1 = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.getPageRole", new Object[] { ultraGrid1.ActiveRow.Cells["ID"].Text }, this.ob); if (dt.Rows.Count > 0) { foreach (DataRow dr in dt1.Rows) { list.Add(dr["PAGE_ID"].ToString()); } } } //树控件递归绑定方法。 Bind_Tv(dt, treeView1.Nodes, null, "PAGE_ID", "SORT_CODE", "PAGE_NAME", list); checkByList(treeView1.Nodes, list); } /// /// top复选框选中事件触发,更新树控件数据源 /// /// /// private void chbx_CheckedChanged(object sender, EventArgs e) { if (this.Cursor == Cursors.WaitCursor) return; //刷新功能。 try { this.Cursor = Cursors.WaitCursor; bandTreeView(); } finally { this.Cursor = Cursors.Default; } } /// /// 绑定TreeView(利用TreeNodeCollection) /// /// TreeNodeCollection(TreeView的节点集合) /// 父id的值 /// 数据库 id 字段名 /// 数据库 父id 字段名 /// 数据库 文本 字段值 private void Bind_Tv(DataTable dtOld, TreeNodesCollection tnc, string pid_val, string id, string pid, string text, ArrayList list) { dtOld.DefaultView.Sort = id + " Asc"; DataTable dt = dtOld.DefaultView.ToTable(); DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据 UltraTreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中 //以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件 string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val); dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据 dt.DefaultView.Sort = id + " Asc"; foreach (DataRowView drv in dv) { tn = new UltraTreeNode();//建立一个新节点(学名叫:一个实例) tn.Tag = drv[id].ToString();//节点的Value值,一般为数据库的id值 tn.Text = drv[text].ToString();//节点的Text,节点的文本显示 //if (list.Contains(drv[id].ToString())) // tn.CheckedState = CheckState.Checked; tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中 Bind_Tv(dt, tn.Nodes, tn.Tag.ToString(), id, pid, text, list);//递归(反复调用这个方法,直到把数据取完为止) } } private void FrmPermissionConfigure_Load(object sender, EventArgs e) { bandTreeView(); } private void ultraButton1_Click(object sender, EventArgs e) { doQuery(); } private void ultraGrid1_AfterRowActivate(object sender, EventArgs e) { QueryUserInfo(); bandTreeView(); } //设置标志,防止死循环 bool check = false; //设置半勾选 int indeterFlag = 0; int checkFlag = 0; private void treeView1_AfterCheck(object sender, NodeEventArgs e) { if (check) { check = false; setchild(e.TreeNode); setparent(e.TreeNode); } } //设置子节点状态 private void setchild(UltraTreeNode node) { foreach (UltraTreeNode child in node.Nodes) { child.CheckedState = node.CheckedState; if (child.Nodes.Count > 0) setchild(child); } } //设置父节点状态 private void setparent(UltraTreeNode node) { if (node.Parent != null) { //如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点 foreach (UltraTreeNode brother in node.Parent.Nodes) { if (brother.CheckedState == CheckState.Indeterminate) indeterFlag++; if (brother.CheckedState == CheckState.Checked) checkFlag++; } if (checkFlag == 0 && indeterFlag == 0) { checkFlag = 0; indeterFlag = 0; node.Parent.CheckedState = CheckState.Unchecked; } else if (checkFlag == node.Parent.Nodes.Count) { checkFlag = 0; indeterFlag = 0; node.Parent.CheckedState = node.CheckedState; } else { checkFlag = 0; indeterFlag = 0; node.Parent.CheckedState = CheckState.Indeterminate; } if (node.Parent.Parent != null) setparent(node.Parent); } } private void treeView1_MouseUp(object sender, MouseEventArgs e) { check = true; } } }