FrmPermissionConfigure.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. using Core.Mes.Client.Comm.Control;
  2. using Core.Mes.Client.Comm.Server;
  3. using Core.Mes.Client.Comm.Tool;
  4. using CoreFS.CA06;
  5. using Infragistics.Win.UltraWinGrid;
  6. using Infragistics.Win.UltraWinTree;
  7. using System;
  8. using System.Collections;
  9. using System.Data;
  10. using System.Drawing;
  11. using System.Windows.Forms;
  12. namespace Core.StlMes.Client.Qcm
  13. {
  14. public partial class FrmPermissionConfigure : FrmBase
  15. {
  16. public FrmPermissionConfigure()
  17. {
  18. InitializeComponent();
  19. ExceptionHelper.RegistException();
  20. }
  21. public override void ToolBar_Click(object sender, string ToolbarKey)
  22. {
  23. switch (ToolbarKey)
  24. {
  25. case "doQuery":
  26. doQuery();
  27. break;
  28. case "doSave":
  29. doSave();
  30. break;
  31. case "Close":
  32. this.Close();
  33. break;
  34. }
  35. }
  36. /// <summary>
  37. /// 树节点选中事件触发时,存储父节点id,防止当父节点选中项转移到其他焦点时,无法获取数据。
  38. /// </summary>
  39. private static string parentCode = "";
  40. /// <summary>
  41. /// 用于修改时验证重复项
  42. /// </summary>
  43. private static string VName = "";
  44. /// <summary>
  45. /// 查找具体的tag
  46. /// </summary>
  47. /// <param name="trnode"></param>
  48. /// <param name="treeTag"></param>
  49. /// <param name="treelist"></param>
  50. private void FindTreeNodeFromTag(TreeNode trnode, string treeTag, ref ArrayList treelist)
  51. {
  52. if (trnode.Tag != null && trnode.Tag.ToString() == treeTag)
  53. {
  54. treelist.Add(trnode);
  55. }
  56. foreach (TreeNode anode in trnode.Nodes)
  57. {
  58. FindTreeNodeFromTag(anode, treeTag, ref treelist);
  59. }
  60. }
  61. /// <summary>
  62. /// 刷新操作
  63. /// </summary>
  64. private void doQuery()
  65. {
  66. this.dataTable1.Clear();
  67. DataTable dt = new DataTable();
  68. dt = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.doQuery", new Object[] { utName.Text }, this.ob);
  69. GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable1, true);
  70. //内容自适应
  71. GridHelper.RefreshAndAutoSizeExceptRows(ultraGrid1, new UltraGridColumn[] {
  72. ultraGrid1.DisplayLayout.Bands[0].Columns["REMARK"]
  73. });
  74. }
  75. /// <summary>
  76. /// 刷新操作
  77. /// </summary>
  78. private void QueryUserInfo()
  79. {
  80. this.dataTable2.Clear();
  81. if (ultraGrid1.ActiveRow == null)
  82. return;
  83. DataTable dt = new DataTable();
  84. dt = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.QueryUserInfo", new Object[] { ultraGrid1.ActiveRow.Cells["ID"].Text }, this.ob);
  85. GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable2, true);
  86. GridHelper.RefreshAndAutoSize(ultraGrid2);
  87. }
  88. /// <summary>
  89. /// 保存
  90. /// </summary>
  91. private void doSave()
  92. {
  93. if (ultraGrid1.ActiveRow == null)
  94. {
  95. MessageUtil.ShowTips("请选中需要保存的角色信息");
  96. return;
  97. }
  98. ArrayList parm = new ArrayList();
  99. getTreeAllInfo(treeView1.Nodes, parm);
  100. CoreClientParam ccp = new CoreClientParam();
  101. ccp.ServerName = "com.steering.pss.qcm.CorePermissionConfigure";
  102. ccp.MethodName = "doSave";
  103. ccp.ServerParams = new object[] { ultraGrid1.ActiveRow.Cells["ID"].Text, UserInfo.GetUserID(), UserInfo.GetUserName(), parm };
  104. ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal);
  105. if (ccp != null)
  106. {
  107. if (ccp.ReturnCode == -1)
  108. {
  109. MessageUtil.ShowWarning(ccp.ReturnInfo);
  110. return;
  111. }
  112. }
  113. else
  114. {
  115. return;
  116. }
  117. MessageUtil.ShowTips("保存成功");
  118. bandTreeView();
  119. }
  120. public void getTreeAllInfo(TreeNodesCollection tnc, ArrayList parm)
  121. {
  122. foreach (UltraTreeNode node in tnc)
  123. {
  124. if (node.CheckedState == CheckState.Checked || node.CheckedState == CheckState.Indeterminate)
  125. parm.Add(node.Tag);
  126. if (node.Nodes.Count > 0)
  127. {
  128. getTreeAllInfo(node.Nodes, parm);
  129. }
  130. }
  131. }
  132. public void checkByList(TreeNodesCollection tnc, ArrayList parm)
  133. {
  134. foreach (UltraTreeNode node in tnc)
  135. {
  136. if (node.Nodes.Count > 0)
  137. {
  138. checkByList(node.Nodes, parm);
  139. }
  140. else
  141. {
  142. if (parm.Contains(node.Tag))
  143. {
  144. node.CheckedState = CheckState.Checked;
  145. setparent(node);
  146. }
  147. }
  148. }
  149. }
  150. /// <summary>
  151. /// 树控件绑定数据源
  152. /// </summary>
  153. public void bandTreeView()
  154. {
  155. treeView1.Nodes.Clear();
  156. DataTable dt = new DataTable();
  157. dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMenuzConfigure.getTreeData", new Object[] { }, this.ob);
  158. ArrayList list = new ArrayList();
  159. if (ultraGrid1.ActiveRow != null)
  160. {
  161. DataTable dt1 = new DataTable();
  162. dt1 = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.getPageRole", new Object[] { ultraGrid1.ActiveRow.Cells["ID"].Text }, this.ob);
  163. if (dt.Rows.Count > 0)
  164. {
  165. foreach (DataRow dr in dt1.Rows)
  166. {
  167. list.Add(dr["PAGE_ID"].ToString());
  168. }
  169. }
  170. }
  171. //树控件递归绑定方法。
  172. Bind_Tv(dt, treeView1.Nodes, null, "PAGE_ID", "SORT_CODE", "PAGE_NAME", list);
  173. checkByList(treeView1.Nodes, list);
  174. }
  175. /// <summary>
  176. /// top复选框选中事件触发,更新树控件数据源
  177. /// </summary>
  178. /// <param name="sender"></param>
  179. /// <param name="e"></param>
  180. private void chbx_CheckedChanged(object sender, EventArgs e)
  181. {
  182. if (this.Cursor == Cursors.WaitCursor) return;
  183. //刷新功能。
  184. try
  185. {
  186. this.Cursor = Cursors.WaitCursor;
  187. bandTreeView();
  188. }
  189. finally
  190. {
  191. this.Cursor = Cursors.Default;
  192. }
  193. }
  194. /// <summary>
  195. /// 绑定TreeView(利用TreeNodeCollection)
  196. /// </summary>
  197. /// <param name="tnc">TreeNodeCollection(TreeView的节点集合)</param>
  198. /// <param name="pid_val">父id的值</param>
  199. /// <param name="id">数据库 id 字段名</param>
  200. /// <param name="pid">数据库 父id 字段名</param>
  201. /// <param name="text">数据库 文本 字段值</param>
  202. private void Bind_Tv(DataTable dtOld, TreeNodesCollection tnc, string pid_val, string id, string pid, string text, ArrayList list)
  203. {
  204. dtOld.DefaultView.Sort = id + " Asc";
  205. DataTable dt = dtOld.DefaultView.ToTable();
  206. DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据
  207. UltraTreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
  208. //以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件
  209. string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);
  210. dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据
  211. dt.DefaultView.Sort = id + " Asc";
  212. foreach (DataRowView drv in dv)
  213. {
  214. tn = new UltraTreeNode();//建立一个新节点(学名叫:一个实例)
  215. tn.Tag = drv[id].ToString();//节点的Value值,一般为数据库的id值
  216. tn.Text = drv[text].ToString();//节点的Text,节点的文本显示
  217. //if (list.Contains(drv[id].ToString()))
  218. // tn.CheckedState = CheckState.Checked;
  219. tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中
  220. Bind_Tv(dt, tn.Nodes, tn.Tag.ToString(), id, pid, text, list);//递归(反复调用这个方法,直到把数据取完为止)
  221. }
  222. }
  223. private void FrmPermissionConfigure_Load(object sender, EventArgs e)
  224. {
  225. bandTreeView();
  226. }
  227. private void ultraButton1_Click(object sender, EventArgs e)
  228. {
  229. doQuery();
  230. }
  231. private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
  232. {
  233. QueryUserInfo();
  234. bandTreeView();
  235. }
  236. //设置标志,防止死循环
  237. bool check = false;
  238. //设置半勾选
  239. int indeterFlag = 0;
  240. int checkFlag = 0;
  241. private void treeView1_AfterCheck(object sender, NodeEventArgs e)
  242. {
  243. if (check)
  244. {
  245. check = false;
  246. setchild(e.TreeNode);
  247. setparent(e.TreeNode);
  248. }
  249. }
  250. //设置子节点状态
  251. private void setchild(UltraTreeNode node)
  252. {
  253. foreach (UltraTreeNode child in node.Nodes)
  254. {
  255. child.CheckedState = node.CheckedState;
  256. if (child.Nodes.Count > 0)
  257. setchild(child);
  258. }
  259. }
  260. //设置父节点状态
  261. private void setparent(UltraTreeNode node)
  262. {
  263. if (node.Parent != null)
  264. {
  265. //如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点
  266. foreach (UltraTreeNode brother in node.Parent.Nodes)
  267. {
  268. if (brother.CheckedState == CheckState.Indeterminate)
  269. indeterFlag++;
  270. if (brother.CheckedState == CheckState.Checked)
  271. checkFlag++;
  272. }
  273. if (checkFlag == 0 && indeterFlag == 0)
  274. {
  275. checkFlag = 0;
  276. indeterFlag = 0;
  277. node.Parent.CheckedState = CheckState.Unchecked;
  278. }
  279. else if (checkFlag == node.Parent.Nodes.Count)
  280. {
  281. checkFlag = 0;
  282. indeterFlag = 0;
  283. node.Parent.CheckedState = node.CheckedState;
  284. }
  285. else
  286. {
  287. checkFlag = 0;
  288. indeterFlag = 0;
  289. node.Parent.CheckedState = CheckState.Indeterminate;
  290. }
  291. if (node.Parent.Parent != null)
  292. setparent(node.Parent);
  293. }
  294. }
  295. private void treeView1_MouseUp(object sender, MouseEventArgs e)
  296. {
  297. check = true;
  298. }
  299. }
  300. }