29f5b5c54082f7ccf2dd2f64d84e77e2f4afe5d1.svn-base 73 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. using System.Data.SqlClient;
  11. using Janus.Windows.GridEX;
  12. using System.Collections;
  13. using Janus.Windows.GridEX.EditControls;
  14. namespace IControls_FireManager
  15. {
  16. public partial class Form_ConfigMAP : Form
  17. {
  18. //** 용인성북용 : true , 신규용 : false
  19. bool Yongin = false;
  20. //** 대화 팝업용
  21. Form DialogPopup = new Form();
  22. //** TB_GROUP 테이블에서 현재 출력그룹리스트를 가지고 와서 OutDeviceGroup에 담기 위해서 사용
  23. ArrayList OutDeviceGroupList = new ArrayList();
  24. //** TB_Map 테이블에서 현재 맵리스트를 가지고 와서 OutDeviceGroup에 담기 위해서 사용
  25. ArrayList MapList = new ArrayList();
  26. //** 나중에 DB에 출력그룹을 ADD 할 때 수신기 ID도 알아야 한다
  27. string Receiver_ID = null;
  28. //** GridEX_GroupList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함
  29. bool FirstUnuseGroup_CurrentCellChanging = true;
  30. //** GridEX_MapList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함
  31. bool FirstUnuseMap_CurrentCellChanging = true;
  32. // 비상방송 출력을 위해서 변수 선언
  33. int COMM_ID = 0;
  34. int BOARD_ID = 0;
  35. int LOOP_NO = 0;
  36. int REPEATER_ID = 0;
  37. int DEVICE_ID = 0;
  38. string INOUT_TYPE = null;
  39. string Broadcation_Receiver = null;
  40. //** 생성자
  41. public Form_ConfigMAP()
  42. {
  43. InitializeComponent();
  44. ///
  45. /// 이벤트 핸들러 등록
  46. ///
  47. //** Form_AddDevice폼에서 전달됨 -> 디바이스를 선택하고 추가버튼을 클릭하면 날아오는 이벤트
  48. _Event.Form_AddDevice_SendMessage_Event += new _Event.Form_AddDevice_SendMessage_Handler(_Event_Form_AddDevice_SendMessage_Event);
  49. //** Form_AddGroup폼에서 전달됨 -> 출력그룹을 선택하고 추가버튼을 클릭하면 날아오는 이벤트
  50. _Event.Form_AddGroup_SendMessage_Event += new _Event.Form_AddGroup_SendMessage_Handler(_Event_Form_AddGroup_SendMessage_Event);
  51. // 워크뷰에 그룹 및 연동설정 텝페이지 별로 작업하기 위한 이벤트
  52. _Event.WorkViewPageName_Oper_SendMessage_Event +=new _Event.WorkViewPageName_Oper_SendMessage_Handler(_Event_WorkViewPageName_Oper_SendMessage_Event);
  53. // 수신기 추가 및 편집 폼에서 작업 완료 이벤트 핸들러 등록
  54. _Event.WorkViewPageName_Receiver_SendMessage_Event += new _Event.WorkViewPageName_Receiver_SendMessage_Handler(_Event_WorkViewPageName_Receiver_SendMessage_Event);
  55. // 탭페이지 속성 (탭은 보여지지 않는다)
  56. this.uiTab_DeviceDetailInfo.ShowTabs = false;
  57. }
  58. //** 폼클로우즈
  59. private void Form_ConfigMAP_FormClosed(object sender, FormClosedEventArgs e)
  60. {
  61. // 이벤트 해제
  62. _Event.Form_AddDevice_SendMessage_Event -= new _Event.Form_AddDevice_SendMessage_Handler(_Event_Form_AddDevice_SendMessage_Event);
  63. _Event.Form_AddGroup_SendMessage_Event -= new _Event.Form_AddGroup_SendMessage_Handler(_Event_Form_AddGroup_SendMessage_Event);
  64. _Event.WorkViewPageName_Oper_SendMessage_Event -= new _Event.WorkViewPageName_Oper_SendMessage_Handler(_Event_WorkViewPageName_Oper_SendMessage_Event);
  65. _Event.WorkViewPageName_Receiver_SendMessage_Event += new _Event.WorkViewPageName_Receiver_SendMessage_Handler(_Event_WorkViewPageName_Receiver_SendMessage_Event);
  66. }
  67. // 프로젝트 열기 이벤트 대신 수신기 추가시에 다시 접속하도록 한다
  68. public void _Event_WorkViewPageName_Receiver_SendMessage_Event(string RECEIVER_ID)
  69. {
  70. if (RECEIVER_ID != null)
  71. {
  72. //
  73. // 데이타베이스 접근 경로 지정부
  74. //
  75. _Data.DataBaseFilePath_Set(null);//(RECEIVER_ID);
  76. }
  77. }
  78. // 워크뷰에 그룹 및 연동설정 텝페이지 별로 작업하기 위한 이벤트
  79. public void _Event_WorkViewPageName_Oper_SendMessage_Event(string RECEIVER_ID, Object_Type TypeName)
  80. {
  81. //** 폼로드시 Receiver ID 얻음
  82. Receiver_ID = RECEIVER_ID;
  83. //** 출력그룹에서 출력 그리드 클리어
  84. GridEX_OutDevice_IN_Group.ClearItems();
  85. //** 연동설정에서 입력, 출력 그리드 클리어
  86. GridEX_InDevice.ClearItems();
  87. GridEX_OutDevice.ClearItems();
  88. switch (TypeName)
  89. {
  90. case Object_Type.OPER_GROUP:
  91. this.TabPage_OutGroup.Selected = true;
  92. //** 폼로드시 출력그룹에 있는 GridEx 셋팅
  93. UI_OutDeviceGroup_GridEx_Initialize();
  94. break;
  95. case Object_Type.OPER_SET:
  96. this.TabPage_ConfigMap.Selected = true;
  97. //** 폼로드시 연동설정에 있는 GridEx 셋팅
  98. UI_MapConfig_GridEx_Initialize();
  99. break;
  100. }
  101. }
  102. //** Form_AddGroup폼에서 전달됨
  103. public void _Event_Form_AddGroup_SendMessage_Event(DEVICE_EVENT EventName)
  104. {
  105. //** 출력그룹에서 그룹을 추가하고나서 갱신된 그룹을 다시 검색하라고 알려주는 이벤트
  106. if (EventName == DEVICE_EVENT.MAP)
  107. {
  108. // GridEX_OutDevice_IN_Group 셋팅
  109. GridEX_InOutDevice_IN_Map_SET();
  110. }
  111. //** 출력그룹에서 닫기버튼 클릭할때 다시 selection을 멀티로 할 수 있게 알려주는 이벤트
  112. if (EventName == DEVICE_EVENT.MAP_SELECTIONMODE)
  113. {
  114. // 다시 속성을 MultipleSelection 바꿈
  115. GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.MultipleSelection;
  116. }
  117. }
  118. //** Form_AddDevice폼에서 전달됨
  119. public void _Event_Form_AddDevice_SendMessage_Event(DEVICE_EVENT EventName)
  120. {
  121. //** 출력그룹에서 디바이스를 추가하고나서 갱신된 디바이스 다시 검색하라고 알려주는 이벤트
  122. if (EventName == DEVICE_EVENT.GROUP)
  123. {
  124. // GridEX_OutDevice_IN_Group 셋팅
  125. GridEX_OutDevice_IN_Group_SET();
  126. }
  127. //** 출력그룹에서 닫기버튼 클릭할때 다시 selection을 멀티로 할 수 있게 알려주는 이벤트
  128. else if (EventName == DEVICE_EVENT.GROUP_SELECTIONMODE)
  129. {
  130. // 다시 속성을 MultipleSelection 바꿈
  131. GridEX_GroupList.SelectionMode = Janus.Windows.GridEX.SelectionMode.MultipleSelection;
  132. }
  133. //** 연동설정에서 디바이스를 추가하고나서 갱신된 디바이스 다시 검색하라고 알려주는 이벤트
  134. else if (EventName == DEVICE_EVENT.MAP)
  135. {
  136. // GridEX_OutDevice_IN_Group 셋팅
  137. GridEX_InOutDevice_IN_Map_SET();
  138. }
  139. //** 연동설정에서 닫기버튼 클릭할때 다시 selection을 멀티로 할 수 있게 알려주는 이벤트
  140. else if (EventName == DEVICE_EVENT.MAP_SELECTIONMODE)
  141. {
  142. // 다시 속성을 MultipleSelection 바꿈
  143. GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.MultipleSelection;
  144. }
  145. }
  146. //** 폼로드시 출력그룹에 있는 GridEx 셋팅
  147. public void UI_OutDeviceGroup_GridEx_Initialize()
  148. {
  149. //
  150. //** 폼로드 할 때, 먼저 GridEX_GroupList 클리어
  151. //
  152. // OutDeviceGroup ArraryList 클리어
  153. OutDeviceGroupList.Clear();
  154. // GridEX_GroupList 클리어
  155. GridEX_GroupList.ClearItems();
  156. // 마지막 GroupID를 저장
  157. string Last_GroupID = null;
  158. //** TB_GROUP 테이블에서 출력그룹을 모두 가지고 온다
  159. DataRowCollection DB_TABLE_DEVICE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", null)); // 네트워크 수신기에서 그룹 아이디는 유일하다
  160. if (DB_TABLE_DEVICE != null)
  161. {
  162. foreach (DataRow dr in DB_TABLE_DEVICE)
  163. {
  164. // 모든 그룹이 들어있는 OutDeviceGroupList에 추가
  165. _OUTDEVIDE_GROUP OutDevice_Group = new _OUTDEVIDE_GROUP();
  166. OutDevice_Group.Receive_ID = Int32.Parse(dr["RECEIVER_ID"].ToString());
  167. OutDevice_Group.ID = dr["GROUP_ID"].ToString();
  168. OutDevice_Group.Group = dr["GROUP_NAME"].ToString();
  169. OutDeviceGroupList.Add(OutDevice_Group);
  170. // 해당 수신기에 있는 그룹만을 보여준다
  171. if (Receiver_ID == dr["RECEIVER_ID"].ToString())
  172. {
  173. GridEXRow row;
  174. row = GridEX_GroupList.AddItem();
  175. row.BeginEdit();
  176. row.Cells["ID"].Value = OutDevice_Group.ID;
  177. row.Cells["Group"].Value = OutDevice_Group.Group;
  178. row.EndEdit();
  179. // 마지막 GroupID를 저장
  180. Last_GroupID = OutDevice_Group.ID;
  181. }
  182. }
  183. }
  184. //
  185. //** 폼로드 할 때, 먼저 GridEX_GroupName 클리어
  186. //
  187. // GridEX_GroupName 클리어
  188. GridEX_GroupName.ClearItems();
  189. // 다음 설정하는 출력그룹 넘버를 출력하기 위해서
  190. GridEXRow Row;
  191. Row = GridEX_GroupName.AddItem();
  192. Row.BeginEdit();
  193. //
  194. //** 이미 만들어진 용인현장용이 아니라면(신규) 그룹ID를 넣어준다
  195. //
  196. if (Yongin == false) // 일반 모든 현장
  197. {
  198. //** ID는 내부적으로 관리(입력 할 수 없다)
  199. GridEX_GroupName.RootTable.Columns[1].EditType = EditType.NoEdit;
  200. //** GROUP_ID 값을 결정하기 위해서
  201. int MaxValue = 1;
  202. //if (GridEX_GroupList.RowCount != 0)
  203. //{
  204. // // 맥스값 찾기
  205. // string group_id = Last_GroupID.Remove(0, 1);
  206. // MaxValue = Int32.Parse(group_id) + 1;
  207. //}
  208. if(DB_TABLE_DEVICE != null)
  209. MaxValue = DB_TABLE_DEVICE.Count + 1;
  210. // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다
  211. string id = "";
  212. if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
  213. id = string.Format("{0:D6}", MaxValue);
  214. else
  215. id = string.Format("{0:D4}", MaxValue);
  216. Row.Cells["ID"].Value = "G" + id;
  217. }
  218. Row.EndEdit();
  219. }
  220. //** 폼로드시 연동설정에 있는 GridEx 셋팅
  221. public void UI_MapConfig_GridEx_Initialize()
  222. {
  223. // 비상방송 텍스트 클리어
  224. EditBox_Area.Text = null;
  225. EditBox_Stair.Text = null;
  226. EditBox_Floor.Text = null;
  227. // 비상방송 저장 및 삭제 버튼 비활성화
  228. UiButton_Broadcastion_Apply.Enabled = false;
  229. UiButton_Broadcastion_Delete.Enabled = false;
  230. //
  231. //** 폼로드 할 때, 먼저 GridEX_MapList 클리어
  232. //
  233. // MapList ArraryList 클리어
  234. MapList.Clear();
  235. // GridEX_GroupList 클리어
  236. GridEX_MapList.ClearItems();
  237. // 마지막 Map_No를 저장
  238. int Last_MapNo = 0;
  239. //** TB_MAP 테이블에서 맵명을 모두 가지고 온다
  240. DataRowCollection DB_TABLE_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP", "MAP_ID", Receiver_ID));
  241. if (DB_TABLE_MAP != null)
  242. {
  243. foreach (DataRow dr in DB_TABLE_MAP)
  244. {
  245. // 모든 맵명이 들어있는 MapList에 추가
  246. _MAP Map = new _MAP();
  247. Map.Receive_ID = Int32.Parse(dr["RECEIVER_ID"].ToString());
  248. Map.Map_No = Int32.Parse(dr["MAP_NO"].ToString());
  249. Map.ID = dr["MAP_ID"].ToString();
  250. Map.Map = dr["MAP_NAME"].ToString();
  251. MapList.Add(Map);
  252. // 해당 수신기에 있는 맵명만을 보여준다
  253. if (Receiver_ID == dr["RECEIVER_ID"].ToString())
  254. {
  255. GridEXRow row;
  256. row = GridEX_MapList.AddItem();
  257. row.BeginEdit();
  258. row.Cells["ID"].Value = Map.ID;
  259. row.Cells["Map"].Value = Map.Map;
  260. row.Cells["Map_No"].Value = Map.Map_No;
  261. row.EndEdit();
  262. // 마지막 Map_No를 저장
  263. Last_MapNo = Map.Map_No;
  264. }
  265. }
  266. }
  267. //
  268. //** 폼로드 할 때, 먼저 GridEX_MapName 클리어
  269. //
  270. // GridEX_MapName 클리어
  271. GridEX_MapName.ClearItems();
  272. // 다음 설정하는 맵 넘버를 출력하기 위해서
  273. GridEXRow Row;
  274. Row = GridEX_MapName.AddItem();
  275. Row.BeginEdit();
  276. //
  277. //** 이미 만들어진 용인현장용이 아니라면(신규) 그룹ID로 넣어준다
  278. //
  279. if (Yongin == false) // 일반 모든 현장
  280. {
  281. //** ID는 내부적으로 관리(입력 할 수 없다)
  282. GridEX_MapName.RootTable.Columns[1].EditType = EditType.NoEdit;
  283. //
  284. //** MAP_ID 값을 결정하기 위해서(수신기별로 유니크한게 아니라 전체에서 유니크함)
  285. //
  286. int MaxValue = 1;
  287. //** TB_MAP 테이블에서 맵명을 모두 가지고 온다
  288. DataRowCollection DB_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Get_ColumnMaxValue("TB_MAP","MAP_NO"));
  289. foreach (DataRow Record in DB_MAP)
  290. {
  291. // 데이타가 아무것도 없다
  292. if (Record[0].ToString().Length != 0)
  293. {
  294. //DB에 저장되어 있는 레코드 수를 알자
  295. MaxValue = Int32.Parse(Record[0].ToString()) + 1;
  296. }
  297. }
  298. // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다
  299. string id = "";
  300. if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
  301. id = string.Format("{0:D6}", MaxValue);
  302. else
  303. id = string.Format("{0:D4}", MaxValue);
  304. Row.Cells["ID"].Value = "M" + id;
  305. }
  306. Row.EndEdit();
  307. }
  308. //** 해당 출력그룹에 출력 디바이스를 셋팅하는 함수
  309. public void GridEX_OutDevice_IN_Group_SET()
  310. {
  311. // 먼저 클리어 시키고 시작
  312. GridEX_OutDevice_IN_Group.ClearItems();
  313. // No.를 출력하기 위해서
  314. int i = 1;
  315. //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다
  316. DataRowCollection DB_TABLE_DEVICE = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Gruop_DeviceTable(_Data.Group_ID, Receiver_ID));
  317. if (DB_TABLE_DEVICE != null)
  318. {
  319. foreach (DataRow dr in DB_TABLE_DEVICE)
  320. {
  321. try
  322. {
  323. if (_Convert.Exception_Into_object(dr[6], dr[7], dr[8], dr[9], dr[10]) == true)
  324. {
  325. // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  326. MskDeviceIDString dev_s = new MskDeviceIDString(
  327. _Convert.Null_to_IntZero(dr[6].ToString()),
  328. _Convert.Null_to_IntZero(dr[7].ToString()),
  329. _Convert.Null_to_IntZero(dr[8].ToString()),
  330. _Convert.Null_to_IntZero(dr[9].ToString()),
  331. _Convert.Null_to_IntZero(dr[10].ToString()),
  332. dr[11].ToString(), dr[15].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  333. GridEXRow row;
  334. row = GridEX_OutDevice_IN_Group.AddItem();
  335. row.BeginEdit();
  336. row.Cells["Number"].Value = i++;
  337. row.Cells["Receiver_ID"].Value = dr[15].ToString(); // 추가
  338. row.Cells["ID"].Value = dev_s.MskId;
  339. row.Cells["DeviceType"].Value = dr[0].ToString();
  340. row.Cells["Position"].Value = dr[1].ToString();
  341. row.Cells["DeviceName"].Value = dr[2].ToString();
  342. row.EndEdit();
  343. }
  344. }
  345. catch (Exception e)
  346. {
  347. // LOG
  348. _Event.DebugView_SendMessage_Write(e.ToString());
  349. // 정보를 가지고 오는데 문제가 발생하였습니다
  350. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.ProblemMessage, 0);
  351. }
  352. }
  353. }
  354. }
  355. //** 해당 맵명에 디바이스와 그룹를 셋팅하는 함수
  356. public void GridEX_InOutDevice_IN_Map_SET()
  357. {
  358. //
  359. //GridEX_InDevice
  360. //
  361. // 먼저 클리어 시키고 시작
  362. GridEX_InDevice.ClearItems();
  363. // No.를 출력하기 위해서
  364. int i = 1;
  365. //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다
  366. DataRowCollection DB_TABLE_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(_Data.Map_No, "I", Receiver_ID));
  367. if (DB_TABLE_MAP_PROCESS != null)
  368. {
  369. foreach (DataRow dr in DB_TABLE_MAP_PROCESS)
  370. {
  371. try
  372. {
  373. if (_Convert.Exception_Into_object(dr[7], dr[8], dr[9], dr[10], dr[11]) == true)
  374. {
  375. // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  376. MskDeviceIDString dev_s = new MskDeviceIDString(
  377. _Convert.Null_to_IntZero(dr[7].ToString()),
  378. _Convert.Null_to_IntZero(dr[8].ToString()),
  379. _Convert.Null_to_IntZero(dr[9].ToString()),
  380. _Convert.Null_to_IntZero(dr[10].ToString()),
  381. _Convert.Null_to_IntZero(dr[11].ToString()),
  382. dr[12].ToString(), dr[6].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  383. GridEXRow row;
  384. row = GridEX_InDevice.AddItem();
  385. row.BeginEdit();
  386. row.Cells["Number"].Value = i++;
  387. row.Cells["Receiver_ID"].Value = dr[6].ToString(); // 추가
  388. row.Cells["ID"].Value = dev_s.MskId;
  389. row.Cells["DeviceType"].Value = dr[0].ToString();
  390. row.Cells["Position"].Value = dr[1].ToString();
  391. row.Cells["DeviceName"].Value = dr[2].ToString();
  392. row.EndEdit();
  393. }
  394. }
  395. catch (Exception e)
  396. {
  397. // LOG
  398. _Event.DebugView_SendMessage_Write(e.ToString());
  399. // 정보를 가지고 오는데 문제가 발생하였습니다
  400. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.ProblemMessage, 0);
  401. }
  402. }
  403. //
  404. //GridEX_OutDevice
  405. //
  406. // 먼저 클리어 시키고 시작
  407. GridEX_OutDevice.ClearItems();
  408. // No.를 출력하기 위해서
  409. int j = 1;
  410. //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다
  411. DataRowCollection DB_TB_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(_Data.Map_No, "O", "D", Receiver_ID));
  412. if (DB_TB_MAP_PROCESS != null)
  413. {
  414. foreach (DataRow dr in DB_TB_MAP_PROCESS)
  415. {
  416. try
  417. {
  418. if (_Convert.Exception_Into_object(dr[7], dr[8], dr[9], dr[10], dr[11]) == true)
  419. {
  420. // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  421. MskDeviceIDString dev_s = new MskDeviceIDString(
  422. _Convert.Null_to_IntZero(dr[7].ToString()),
  423. _Convert.Null_to_IntZero(dr[8].ToString()),
  424. _Convert.Null_to_IntZero(dr[9].ToString()),
  425. _Convert.Null_to_IntZero(dr[10].ToString()),
  426. _Convert.Null_to_IntZero(dr[11].ToString()),
  427. dr[12].ToString(), dr[6].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  428. GridEXRow row;
  429. row = GridEX_OutDevice.AddItem();
  430. row.BeginEdit();
  431. row.Cells["Number"].Value = j++;
  432. row.Cells["Receiver_ID"].Value = dr[6].ToString(); // 추가
  433. row.Cells["ID"].Value = dev_s.MskId;
  434. row.Cells["DeviceType"].Value = dr[0].ToString();
  435. row.Cells["Position"].Value = dr[1].ToString();
  436. row.Cells["DeviceName"].Value = dr[2].ToString();
  437. row.Cells["ProcessType"].Value = dr[4].ToString();
  438. row.EndEdit();
  439. }
  440. }
  441. catch (Exception e)
  442. {
  443. // LOG
  444. _Event.DebugView_SendMessage_Write(e.ToString());
  445. // 정보를 가지고 오는데 문제가 발생하였습니다
  446. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.ProblemMessage, 0);
  447. }
  448. }
  449. }
  450. //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다
  451. DataRowCollection DB_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(_Data.Map_No, "O", "G", Receiver_ID));
  452. if (DB_MAP_PROCESS != null)
  453. {
  454. foreach (DataRow dr in DB_MAP_PROCESS)
  455. {
  456. // TB_GROUP 테이블에 접근
  457. DataRowCollection DB_TABLE_TB_DEVICE_TYPE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", dr[5].ToString(), null)); // 맵연동 설정에서 확인하는 출력그룹은 오로지 그룹아이디로만 판단
  458. if (DB_TABLE_TB_DEVICE_TYPE != null)
  459. {
  460. foreach (DataRow Dr in DB_TABLE_TB_DEVICE_TYPE)
  461. {
  462. GridEXRow row;
  463. row = GridEX_OutDevice.AddItem();
  464. row.BeginEdit();
  465. row.Cells["Number"].Value = j++;
  466. row.Cells["Receiver_ID"].Value = Dr[0].ToString();
  467. row.Cells["ID"].Value = dr[5].ToString();
  468. row.Cells["DeviceName"].Value = Dr[2].ToString();
  469. row.Cells["ProcessType"].Value = dr[4].ToString();
  470. row.EndEdit();
  471. }
  472. }
  473. }
  474. }
  475. }
  476. // 비상방송 텍스트 클리어
  477. EditBox_Area.Text = null;
  478. EditBox_Stair.Text = null;
  479. EditBox_Floor.Text = null;
  480. // 비상방송 저장과 삭제버튼도 비활성화
  481. UiButton_Broadcastion_Apply.Enabled = false;
  482. UiButton_Broadcastion_Delete.Enabled = false;
  483. }
  484. //** 입력 회로 추가 버튼 - 연동설정에 있는 입력회로
  485. private void UiButton_AddInDevice_Click(object sender, EventArgs e)
  486. {
  487. //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다
  488. if (GridEX_MapList.SelectedItems.Count == 1 && GridEX_MapList.HideSelection == HideSelection.Highlight)
  489. {
  490. _Data.MenuActivedForm = new Form_AddDevice(Receiver_ID, "Map", "I");
  491. _Form.Create(_Data.MenuActivedForm, null);
  492. //** 디바이스추가폼이 로드되면 GridEX_MapList에서 단지 하나만 선택할 수 있도록 한다
  493. GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;
  494. }
  495. else
  496. {
  497. // 맵명을 하나만 선택해 주세요
  498. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapChoiceOnlyOne, 0);
  499. }
  500. }
  501. //** 입력 회로 삭제 버튼 - 연동설정에 있는 입력회로
  502. private void UiButton_DeleteIn_Click(object sender, EventArgs e)
  503. {
  504. //** GridEX_InDevice에서 선택한 행의 갯수를 알기 위해서
  505. int SelectRowCount = GridEX_InDevice.SelectedItems.Count;
  506. //** 선택한 행이 없으면 팝업을 띄운다
  507. if (SelectRowCount == 0)
  508. {
  509. // 삭제할 입력을 선택해 주세요
  510. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.DelInNotChoice, 0);
  511. return;
  512. }
  513. for (int number = 0; number < SelectRowCount; number++)
  514. {
  515. GridEXRow row = GridEX_InDevice.SelectedItems[number].GetRow();
  516. string Real_RECEIVER_ID = row.Cells["Receiver_ID"].Value.ToString();
  517. string Device_ID = row.Cells["ID"].Value.ToString();
  518. // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  519. MskDeviceIDString device_id = new MskDeviceIDString(Device_ID, Real_RECEIVER_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  520. // 입력디바이스 삭제
  521. _Db.Execute(_Sql.Delete_Table("TB_MAP_PROCESS", "MAP_NO", _Data.Map_No, "COMM_ID", device_id.Comm_id, "BOARD_ID", device_id.Board_id,
  522. "LOOP_NO", device_id.Loop_no, "REPEATER_ID", device_id.Repeater_id,
  523. "DEVICE_ID", device_id.Device_id, "INOUT_TYPE", device_id.Inout_type,
  524. "MAP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));
  525. }
  526. // 다시 읽어들임
  527. GridEX_InOutDevice_IN_Map_SET();
  528. ////** 시컨스 문제 해결 -> 중간에 있는 입력을 삭제해 버리면 시컨스가 틀어진다
  529. //DataRowCollection DB_TABLE_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP_PROCESS", "MAP_NO", _Data.Map_No, "MAP_TYPE", "I"));
  530. //int i = 1;
  531. //if (DB_TABLE_MAP_PROCESS != null)
  532. //{
  533. // foreach (DataRow dr in DB_TABLE_MAP_PROCESS)
  534. // {
  535. // // UPDATE로 해결하자
  536. // _Db.UPDATE("TB_MAP_PROCESS",
  537. // "MAP_NO=" + _Data.Map_No +
  538. // ";SEQ_NO=" + dr[3].ToString(),
  539. // "SEQ_NO=" + i++);
  540. // }
  541. //}
  542. // GridEX_InOutDevice_IN_Map_SET 셋팅
  543. }
  544. //** 출력 회로 추가 버튼 - 연동설정에 있는 출력회로
  545. private void UiButton_AddOutDevice_Click(object sender, EventArgs e)
  546. {
  547. //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다
  548. if (GridEX_MapList.SelectedItems.Count == 1 && GridEX_MapList.HideSelection == HideSelection.Highlight)
  549. {
  550. _Data.MenuActivedForm = new Form_AddDevice(Receiver_ID, "Map", "O");
  551. _Form.Create(_Data.MenuActivedForm, null);
  552. //** 디바이스추가폼이 로드되면 GridEX_MapList에서 단지 하나만 선택할 수 있도록 한다
  553. GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;
  554. }
  555. else
  556. {
  557. // 맵명을 하나만 선택해 주세요
  558. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapChoiceOnlyOne, 0);
  559. }
  560. }
  561. //** 출력 회로 삭제 버튼 - 연동설정에 있는 출력회로
  562. private void UiButton_DeleteOut_Click(object sender, EventArgs e)
  563. {
  564. //** GridEX_OutDevice에서 선택한 행의 갯수를 알기 위해서
  565. int SelectRowCount = GridEX_OutDevice.SelectedItems.Count;
  566. //** 선택한 행이 없으면 팝업을 띄운다
  567. if (SelectRowCount == 0)
  568. {
  569. // 삭제할 출력을 선택해 주세요
  570. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.DelOutNotChoice, 0);
  571. return;
  572. }
  573. for (int number = 0; number < SelectRowCount; number++)
  574. {
  575. GridEXRow row = GridEX_OutDevice.SelectedItems[number].GetRow();
  576. string Real_RECEIVER_ID = row.Cells["Receiver_ID"].Value.ToString();
  577. if (row.Cells["ProcessType"].Value.ToString() == "D")
  578. {
  579. string Device_ID = row.Cells["ID"].Value.ToString();
  580. // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  581. MskDeviceIDString device_id = new MskDeviceIDString(Device_ID, Real_RECEIVER_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  582. // 출력디바이스 삭제
  583. _Db.Execute(_Sql.Delete_Table("TB_MAP_PROCESS", "MAP_NO", _Data.Map_No, "COMM_ID", device_id.Comm_id, "BOARD_ID", device_id.Board_id,
  584. "LOOP_NO", device_id.Loop_no, "REPEATER_ID", device_id.Repeater_id,
  585. "DEVICE_ID", device_id.Device_id, "INOUT_TYPE", device_id.Inout_type,
  586. "MAP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));
  587. }
  588. else if (row.Cells["ProcessType"].Value.ToString() == "G")
  589. {
  590. // 출력그룹 삭제
  591. _Db.Execute(_Sql.Delete_Table("TB_MAP_PROCESS", "MAP_NO", _Data.Map_No, "GROUP_ID", row.Cells["ID"].Value.ToString(), "MAP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));
  592. }
  593. }
  594. // 다시 읽어들임
  595. GridEX_InOutDevice_IN_Map_SET();
  596. }
  597. //** 출력 그룹 추가 버튼 - 연동설정에 있는 출력그룹
  598. private void UiButton_AddOutGroup_Click(object sender, EventArgs e)
  599. {
  600. //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다
  601. if (GridEX_MapList.SelectedItems.Count == 1 && GridEX_MapList.HideSelection == HideSelection.Highlight)
  602. {
  603. _Data.MenuActivedForm = new Form_AddGroup(Receiver_ID);
  604. _Form.Create(_Data.MenuActivedForm, null);
  605. //** 디바이스추가폼이 로드되면 GridEX_MapList에서 단지 하나만 선택할 수 있도록 한다
  606. GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;
  607. }
  608. else
  609. {
  610. // 맵명을 하나만 선택해 주세요
  611. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapChoiceOnlyOne, 0);
  612. }
  613. }
  614. //** 출력 회로 추가 버튼 - 출력을 그룹으로 묶을때
  615. private void UiButton_AddOutDevice_InGroup_Click(object sender, EventArgs e)
  616. {
  617. //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다
  618. if (GridEX_GroupList.SelectedItems.Count == 1 && GridEX_GroupList.HideSelection == HideSelection.Highlight)
  619. {
  620. _Data.MenuActivedForm = new Form_AddDevice(Receiver_ID, "Group", "O");
  621. _Form.Create(_Data.MenuActivedForm, null);
  622. //** 디바이스추가폼이 로드되면 GridEX_GroupList에서 단지 하나만 선택할 수 있도록 한다
  623. GridEX_GroupList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;
  624. // 프로젝트 수정
  625. _Data.ProJect_Save_Complete = false;
  626. }
  627. else
  628. {
  629. // 출력그룹명을 하나만 선택해 주세요
  630. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupChoiceOnlyOne, 0);
  631. }
  632. }
  633. //** 출력 회로 삭제 버튼 - 특정 출력그룹에서 특정 출력디바이스 삭제
  634. private void UiButton_DeleteOutDevice_IN_Group_Click(object sender, EventArgs e)
  635. {
  636. //** GridEX_OutDevice_IN_Group에서 선택한 행의 갯수를 알기 위해서
  637. int SelectRowCount = GridEX_OutDevice_IN_Group.SelectedItems.Count;
  638. //** 선택한 행이 없으면 팝업을 띄운다
  639. if (SelectRowCount == 0)
  640. {
  641. // 삭제할 회로를 선택해 주세요
  642. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.DelDeviceNotChoice, 0);
  643. return;
  644. }
  645. for (int number = 0; number < SelectRowCount; number++)
  646. {
  647. GridEXRow row = GridEX_OutDevice_IN_Group.SelectedItems[number].GetRow();
  648. string Real_RECEIVER_ID = row.Cells["Receiver_ID"].Value.ToString();
  649. string Device_ID = row.Cells["ID"].Value.ToString();
  650. // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  651. MskDeviceIDString device_id = new MskDeviceIDString(Device_ID, Real_RECEIVER_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  652. // 출력디바이스 삭제
  653. _Db.Execute(_Sql.Delete_Table("TB_GROUP_DEVICE", "GROUP_ID", _Data.Group_ID, "COMM_ID", device_id.Comm_id, "BOARD_ID", device_id.Board_id,
  654. "LOOP_NO", device_id.Loop_no, "REPEATER_ID", device_id.Repeater_id,
  655. "DEVICE_ID", device_id.Device_id, "INOUT_TYPE", device_id.Inout_type,
  656. "GROUP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));
  657. }
  658. // 프로젝트 수정
  659. _Data.ProJect_Save_Complete = false;
  660. // 다시 읽어들임
  661. GridEX_OutDevice_IN_Group_SET();
  662. }
  663. //** 출력그룹 추가 버튼
  664. private void UiButton_AddGroupName_Click(object sender, EventArgs e)
  665. {
  666. // 수신기1 G001 수신기1-1
  667. // 수신기1 G002 수신기1-2
  668. // 수신기1 G003 수신기1-3
  669. // 수신기2 G001 수신기2-1
  670. // 수신기2 G002 수신기2-2
  671. // 수신기2 G003 수신기2-3
  672. string GROUP_ID = null;
  673. string GROUP_NAME = null;
  674. //** 일단 입력한 출력그룹 ID 와 출력그룹명을 알아야 한다
  675. //** GridEX_GroupName에서 그룹
  676. GridEXRow[] GridEx_Rows = GridEX_GroupName.GetRows();
  677. // foreach문이지만 무조건 1개의 행만 있으니 한번만 실행
  678. foreach (GridEXRow row in GridEx_Rows)
  679. {
  680. GROUP_ID = row.Cells["ID"].Text;
  681. GROUP_NAME = row.Cells["Group"].Text;
  682. }
  683. //// 용인성북 현장용(일단 주석처리)
  684. ////** 그룹ID를 입력하지 않았을 경우
  685. //if(GROUP_ID.Length == 0)
  686. //{
  687. // // 그룹ID를 입력해 주세요
  688. // _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupIDNotInput, 0);
  689. // return;
  690. //}
  691. //** 그룹명을 입력하지 않았을 경우
  692. if(GROUP_NAME.Length == 0)
  693. {
  694. // 출력그룹명을 입력해 주세요
  695. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupNameNotInput, 0);
  696. return;
  697. }
  698. //// 용인성북 현장용(일단 주석처리)
  699. ////** 입력한 그룹ID가 DB에 있을 경우
  700. //foreach (_OUTDEVIDE_GROUP row in OutDeviceGroupList)
  701. //{
  702. // if(row.ID == GROUP_ID)
  703. // {
  704. // // 동일한 그룹ID가 이미 존재합니다
  705. // _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupIDAlreadyHave, 0);
  706. // return;
  707. // }
  708. //}
  709. //** 해당 수신기에 동일한 그룹명이 존재하는지 확인
  710. // 일단하지말자
  711. // "TB_GROUP"에 DB 삽입
  712. _Db.ADD("TB_GROUP",
  713. "RECEIVER_ID=" + Receiver_ID +
  714. ";GROUP_ID=" + GROUP_ID +
  715. ";GROUP_NAME=" + GROUP_NAME +
  716. ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  717. //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.
  718. // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다
  719. _Data.Group_ID = null;
  720. // 여기서부터 새롭게 구성
  721. //** 모든 그룹이 들어있는 OutDeviceGroupList에 추가
  722. _OUTDEVIDE_GROUP OutDevice_Group = new _OUTDEVIDE_GROUP();
  723. OutDevice_Group.Receive_ID = Int32.Parse(Receiver_ID);
  724. OutDevice_Group.ID = GROUP_ID;
  725. OutDevice_Group.Group = GROUP_NAME;
  726. OutDeviceGroupList.Add(OutDevice_Group);
  727. //** GridEx 추가
  728. GridEXRow ROW;
  729. ROW = GridEX_GroupList.AddItem();
  730. ROW.BeginEdit();
  731. ROW.Cells["ID"].Value = GROUP_ID;
  732. ROW.Cells["Group"].Value = GROUP_NAME;
  733. ROW.EndEdit();
  734. //** 다음 순서를 GridEX_GroupName에 올리자
  735. // GridEX_GroupName 클리어
  736. GridEX_GroupName.ClearItems();
  737. // 다음 설정하는 출력그룹 넘버를 출력하기 위해서
  738. GridEXRow Row;
  739. Row = GridEX_GroupName.AddItem();
  740. Row.BeginEdit();
  741. // 맥스값 찾기
  742. string group_id = GROUP_ID.Remove(0, 1);
  743. int MaxValue = Int32.Parse(group_id) + 1;
  744. // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다
  745. string id = "";
  746. if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
  747. id = string.Format("{0:D6}", MaxValue);
  748. else
  749. id = string.Format("{0:D4}", MaxValue);
  750. Row.Cells["ID"].Value = "G" + id;
  751. Row.EndEdit();
  752. // 여기까지 새롭게 구성
  753. //** GridEX_OutDevice_IN_Group 클리어시켜줌
  754. GridEX_OutDevice_IN_Group.ClearItems();
  755. //** GridEX_GroupList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용
  756. // 그룹명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다
  757. // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다
  758. GridEX_GroupList.HideSelection = HideSelection.HideSelection;
  759. // 프로젝트 수정
  760. _Data.ProJect_Save_Complete = false;
  761. }
  762. //** 출력그룹 삭제 버튼
  763. private void UiButton_DeleteGroupName_Click(object sender, EventArgs e)
  764. {
  765. //** GridEX_GroupList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용
  766. // 그룹명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다
  767. // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다
  768. if (GridEX_GroupList.HideSelection == HideSelection.HideSelection)
  769. {
  770. // 삭제 하실 출력그룹을 선택해 주세요
  771. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupNotChoice, 0);
  772. return;
  773. }
  774. // 선택한 출력그룹을 삭제하시겠습니까?
  775. DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 300, 150, _Text.GroupDelete_Continue, 0);
  776. // 대화 팝업은 특별처리
  777. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteOutGroup);
  778. }
  779. //** 팝업에서 Yes, NO 에서 받은 이벤트 처리(출력그룹 삭제시)
  780. public void _Event_PopupClose_SendMessage_Event_DeleteOutGroup(object sender, object etc)
  781. {
  782. // 대화 팝업 주체
  783. Form popup = (Form)sender;
  784. int SelectRowCount = GridEX_GroupList.SelectedItems.Count;
  785. if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)
  786. {
  787. DataRowCollection DB_TB_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP_PROCESS", "GROUP_ID", _Data.Group_ID, Receiver_ID));
  788. if (DB_TB_MAP_PROCESS != null)
  789. {
  790. // 연동설정에서 해당 그룹이 설정되어 있다면 삭제 할 수 없도록 한다
  791. if (DB_TB_MAP_PROCESS.Count != 0)
  792. {
  793. // 연동설정에서 해당 그룹이 설정되어 있어서 삭제 할 수 없습니다
  794. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 500, 150, _Text.GroupNotdelete, 0);
  795. }
  796. else // 연동설정에서 해당 그룹이 설정되어 있지 않다면 삭제 할 수 있음
  797. {
  798. // Deep Copy (깊은 복사)
  799. object Copy_OutDeviceGroupList = OutDeviceGroupList.Clone();
  800. int Selected_Count = GridEX_GroupList.SelectedItems.Count;
  801. // 출력 그룹도 멀티로 삭제 가능
  802. for (int number = 0; number < Selected_Count; number++)
  803. {
  804. GridEXRow row = GridEX_GroupList.SelectedItems[0].GetRow();
  805. string Group_ID = row.Cells["ID"].Value.ToString();
  806. //** DB에서 삭제
  807. // 출력그룹 삭제
  808. _Db.Execute(_Sql.Delete_Table("TB_GROUP", "GROUP_ID", Group_ID, Receiver_ID));
  809. // 해당 그룹에 연동되어 있는 출력디바이스 삭제
  810. _Db.Execute(_Sql.Delete_Table("TB_GROUP_DEVICE", "GROUP_ID", Group_ID, "GROUP_RECEIVER_ID", Receiver_ID, null));
  811. //** 리스트에서 삭제
  812. foreach (_OUTDEVIDE_GROUP OutDevice_Group in (ArrayList)Copy_OutDeviceGroupList)
  813. {
  814. // 동일한 수신기 ID와 그룹 ID를 가지면 삭제
  815. if (OutDevice_Group.Receive_ID.ToString() == Receiver_ID && OutDevice_Group.ID == Group_ID)
  816. {
  817. // 리스트에서 삭제
  818. OutDeviceGroupList.Remove(OutDevice_Group);
  819. // UI에서 삭제
  820. row.Cells.Row.Delete();
  821. break;
  822. }
  823. }
  824. }
  825. //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.
  826. // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다
  827. _Data.Group_ID = null;
  828. // 삭제가 되었으니까 다음 순서(GroupID)를 다시 잡아주자
  829. // GridEX_GroupName 클리어
  830. GridEX_GroupName.ClearItems();
  831. // 총 갯수 파악하기 위해
  832. GridEXRow[] GridEx_Rows = GridEX_GroupList.GetRows();
  833. int MaxValue = 1;
  834. // 삭제하였는데 등록되어 있는 그룹이 있다
  835. if (GridEx_Rows.Count() != 0)
  836. {
  837. // 맥스값 찾기
  838. string group_id = GridEx_Rows[GridEx_Rows.Count() - 1].Cells["ID"].Value.ToString().Remove(0, 1);
  839. MaxValue = Int32.Parse(group_id) + 1;
  840. }
  841. // 다음 설정하는 출력그룹 넘버를 출력하기 위해서
  842. GridEXRow Row;
  843. Row = GridEX_GroupName.AddItem();
  844. Row.BeginEdit();
  845. // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다
  846. string id = "";
  847. if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
  848. id = string.Format("{0:D6}", MaxValue);
  849. else
  850. id = string.Format("{0:D4}", MaxValue);
  851. Row.Cells["ID"].Value = "G" + id;
  852. Row.EndEdit();
  853. //** GridEX_OutDevice_IN_Group 클리어시켜줌
  854. GridEX_OutDevice_IN_Group.ClearItems();
  855. //** GridEX_GroupList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용
  856. // 그룹명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다
  857. // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다
  858. GridEX_GroupList.HideSelection = HideSelection.HideSelection;
  859. }
  860. }
  861. // 프로젝트 수정
  862. _Data.ProJect_Save_Complete = false;
  863. }
  864. // 대화 팝업은 특별처리(이벤트 해제)
  865. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteOutGroup);
  866. }
  867. //** GridEX_GroupList를 클릭할 때 발생
  868. private void GridEX_GroupList_CurrentCellChanging(object sender, CurrentCellChangingEventArgs e)
  869. {
  870. // GridEX_GroupList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함
  871. if (FirstUnuseGroup_CurrentCellChanging == true)
  872. {
  873. // 다음부터는 사용 가능
  874. FirstUnuseGroup_CurrentCellChanging = false;
  875. if (e.Row == null) return;
  876. // GridEX_GroupList의 레코드를 선택했을 때, Group_ID를 저장
  877. _Data.Group_ID = e.Row.Cells["ID"].Value.ToString();
  878. // GridEX_OutDevice_IN_Group 셋팅
  879. GridEX_OutDevice_IN_Group_SET();
  880. }
  881. else
  882. {
  883. // 맨처음 로드 될때 GridEX_GroupList에 행이 선택되어 있는 것을 방지하기 위해서 HideSelection 속성에 HideSelection을 줌
  884. // 다음부터는 선택한 레코드의 포커스가 남겨짐
  885. GridEX_GroupList.HideSelection = HideSelection.Highlight;
  886. if (e.Row == null) return;
  887. // GridEX_GroupList의 레코드를 선택했을 때, Group_ID를 저장
  888. _Data.Group_ID = e.Row.Cells["ID"].Value.ToString();
  889. // GridEX_OutDevice_IN_Group 셋팅
  890. GridEX_OutDevice_IN_Group_SET();
  891. }
  892. }
  893. //** 맵 추가 버튼
  894. private void UiButton_AddMapName_Click(object sender, EventArgs e)
  895. {
  896. string MAP_ID = null;
  897. string MAP_NAME = null;
  898. //** 일단 입력한 출력그룹 ID 와 출력그룹명을 알아야 한다
  899. //** GridEX_GroupName에서 그룹
  900. GridEXRow[] GridEx_Rows = GridEX_MapName.GetRows();
  901. foreach (GridEXRow row in GridEx_Rows)
  902. {
  903. MAP_ID = row.Cells["ID"].Text;
  904. MAP_NAME = row.Cells["Map"].Text;
  905. }
  906. //// 용인성북 현장용(일단 주석처리)
  907. ////** 맵ID를 입력하지 않았을 경우
  908. //if (MAP_ID.Length == 0)
  909. //{
  910. // // 맵ID를 입력해 주세요
  911. // _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapIDNotInput, 0);
  912. // return;
  913. //}
  914. //** 맵명을 입력하지 않았을 경우
  915. if (MAP_NAME.Length == 0)
  916. {
  917. // 맵명을 입력해 주세요
  918. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapNameNotInput, 0);
  919. return;
  920. }
  921. //// 용인성북 현장용(일단 주석처리)
  922. ////** 입력한 맵ID가 DB에 있을 경우
  923. //foreach (_MAP row in MapList)
  924. //{
  925. // if (row.ID == MAP_ID)
  926. // {
  927. // // 동일한 맵ID가 이미 존재합니다
  928. // _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapIDAlreadyHave, 0);
  929. // return;
  930. // }
  931. //}
  932. //** 어레이리스트 MapList의 가장 마지막 행의 MAP_NO 값을 가지고 온다
  933. //_MAP Map = (_MAP)MapList[MapList.Count - 1];
  934. int MAP_NO = Int32.Parse(MAP_ID.Remove(0, 1));
  935. // "TB_MAP"에 DB 삽입
  936. _Db.ADD("TB_MAP",
  937. "RECEIVER_ID=" + Receiver_ID +
  938. ";MAP_NO=" + MAP_NO +
  939. ";MAP_ID=" + MAP_ID +
  940. ";MAP_NAME=" + MAP_NAME +
  941. ";USE_FLAG=" + "Y" +
  942. ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  943. //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.
  944. // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다
  945. _Data.Map_No = null;
  946. // 여기서부터 새롭게 구성
  947. _MAP Map = new _MAP();
  948. Map.Receive_ID = Int32.Parse(Receiver_ID);
  949. Map.Map_No = MAP_NO;
  950. Map.ID = MAP_ID;
  951. Map.Map = MAP_NAME;
  952. MapList.Add(Map);
  953. //** GridEx 추가
  954. GridEXRow ROW;
  955. ROW = GridEX_MapList.AddItem();
  956. ROW.BeginEdit();
  957. ROW.Cells["ID"].Value = MAP_ID;
  958. ROW.Cells["Map"].Value = MAP_NAME;
  959. ROW.Cells["Map_No"].Value = MAP_NO;
  960. ROW.EndEdit();
  961. //** 다음 순서를 GridEX_MapName에 올리자
  962. // GridEX_MapName 클리어
  963. GridEX_MapName.ClearItems();
  964. // 다음 설정하는 맵명 넘버를 출력하기 위해서
  965. GridEXRow Row;
  966. Row = GridEX_MapName.AddItem();
  967. Row.BeginEdit();
  968. // 맥스값 찾기
  969. string map_id = MAP_ID.Remove(0, 1);
  970. int MaxValue = Int32.Parse(map_id) + 1;
  971. // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다
  972. string id = "";
  973. if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
  974. id = string.Format("{0:D6}", MaxValue);
  975. else
  976. id = string.Format("{0:D4}", MaxValue);
  977. Row.Cells["ID"].Value = "M" + id;
  978. Row.EndEdit();
  979. //** 여기까지 새롭게 구성
  980. //** GridEX_InDevice 클리어시켜줌
  981. GridEX_InDevice.ClearItems();
  982. //** GridEX_OutDevice 클리어시켜줌
  983. GridEX_OutDevice.ClearItems();
  984. //** GridEX_MapList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용
  985. // 맵명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다
  986. // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다
  987. GridEX_MapList.HideSelection = HideSelection.HideSelection;
  988. // 프로젝트 수정
  989. _Data.ProJect_Save_Complete = false;
  990. }
  991. //** 맵 삭제 버튼
  992. private void UiButton_DeleteMapName_Click(object sender, EventArgs e)
  993. {
  994. //** GridEX_MapList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용
  995. // 맵명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다
  996. // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다
  997. if (GridEX_MapList.HideSelection == HideSelection.HideSelection)
  998. {
  999. // 삭제할 맵명을 선택해 주세요
  1000. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapNotChoice, 0);
  1001. return;
  1002. }
  1003. // 선택한 맵명을 삭제하시겠습니까?
  1004. DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 300, 150, _Text.MapDelete_Continue, 0);
  1005. // 대화 팝업은 특별처리
  1006. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteMap);
  1007. }
  1008. //** 팝업에서 Yes, NO 에서 받은 이벤트 처리(맵 삭제시)
  1009. public void _Event_PopupClose_SendMessage_Event_DeleteMap(object sender, object etc)
  1010. {
  1011. // 대화 팝업 주체
  1012. Form popup = (Form)sender;
  1013. int SelectRowCount = GridEX_MapList.SelectedItems.Count;
  1014. if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)
  1015. {
  1016. // Deep Copy (깊은 복사)
  1017. object Copy_MapList = MapList.Clone();
  1018. int Selected_Count = GridEX_MapList.SelectedItems.Count;
  1019. // 맵명도 멀티로 삭제 가능
  1020. for (int number = 0; number < Selected_Count; number++)
  1021. {
  1022. GridEXRow row = GridEX_MapList.SelectedItems[0].GetRow();
  1023. string Map_No = row.Cells["Map_No"].Value.ToString();
  1024. //** DB에서 삭제
  1025. // 맵명 삭제
  1026. _Db.Execute(_Sql.Delete_Table("TB_MAP", "MAP_NO", Map_No, Receiver_ID));
  1027. // 해당 맵명에 연동되어 있는 그룹이나 입출력 디바이스 삭제
  1028. _Db.Execute(_Sql.Delete_Table("TB_MAP_PROCESS", "MAP_NO", Map_No, "MAP_RECEIVER_ID", Receiver_ID, null));
  1029. //** 리스트에서 삭제
  1030. foreach (_MAP Map in (ArrayList)Copy_MapList)
  1031. {
  1032. // 동일한 수신기 ID와 그룹 ID를 가지면 삭제
  1033. if (Map.Receive_ID.ToString() == Receiver_ID && Map.Map_No.ToString() == Map_No)
  1034. {
  1035. // 리스트에서 삭제
  1036. MapList.Remove(Map);
  1037. // UI에서 삭제
  1038. row.Cells.Row.Delete();
  1039. break;
  1040. }
  1041. }
  1042. }
  1043. //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.
  1044. // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다
  1045. _Data.Map_No = null;
  1046. // 삭제가 되었으니까 다음 순서(MapID)를 다시 잡아주자
  1047. // GridEX_MapName 클리어
  1048. GridEX_MapName.ClearItems();
  1049. //
  1050. //** MAP_ID 값을 결정하기 위해서(수신기별로 유니크한게 아니라 전체에서 유니크함)
  1051. //
  1052. int MaxValue = 1;
  1053. //** TB_MAP 테이블에서 맵명을 모두 가지고 온다
  1054. DataRowCollection DB_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Get_ColumnMaxValue("TB_MAP", "MAP_NO"));
  1055. foreach (DataRow Record in DB_MAP)
  1056. {
  1057. // 데이타가 아무것도 없다
  1058. if (Record[0].ToString().Length != 0)
  1059. {
  1060. //DB에 저장되어 있는 레코드 수를 알자
  1061. MaxValue = Int32.Parse(Record[0].ToString()) + 1;
  1062. }
  1063. }
  1064. // 다음 설정하는 맵명 넘버를 출력하기 위해서
  1065. GridEXRow Row;
  1066. Row = GridEX_MapName.AddItem();
  1067. Row.BeginEdit();
  1068. // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다
  1069. string id = "";
  1070. if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함
  1071. id = string.Format("{0:D6}", MaxValue);
  1072. else
  1073. id = string.Format("{0:D4}", MaxValue);
  1074. Row.Cells["ID"].Value = "M" + id;
  1075. Row.EndEdit();
  1076. //** GridEX_InDevice 클리어시켜줌
  1077. GridEX_InDevice.ClearItems();
  1078. //** GridEX_OutDevice 클리어시켜줌
  1079. GridEX_OutDevice.ClearItems();
  1080. //** GridEX_MapList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용
  1081. // 맵명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다
  1082. // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다
  1083. GridEX_MapList.HideSelection = HideSelection.HideSelection;
  1084. }
  1085. // 프로젝트 수정
  1086. _Data.ProJect_Save_Complete = false;
  1087. // 대화 팝업은 특별처리(이벤트 해제)
  1088. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteMap);
  1089. }
  1090. //** GridEX_MapList를 클릭할 때 발생
  1091. private void GridEX_MapList_CurrentCellChanging(object sender, CurrentCellChangingEventArgs e)
  1092. {
  1093. // GridEX_MapList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함
  1094. if (FirstUnuseMap_CurrentCellChanging == true)
  1095. {
  1096. // 다음부터는 사용 가능
  1097. FirstUnuseMap_CurrentCellChanging = false;
  1098. if (e.Row == null) return;
  1099. // GridEX_MapList의 레코드를 선택했을 때, Map_ID를 저장
  1100. _Data.Map_No = e.Row.Cells["Map_No"].Value.ToString();
  1101. // GridEX_InDevice와 GridEX_OutDevice 셋팅
  1102. GridEX_InOutDevice_IN_Map_SET();
  1103. }
  1104. else
  1105. {
  1106. // 맨처음 로드 될때 GridEX_MapList에 행이 선택되어 있는 것을 방지하기 위해서 HideSelection 속성에 HideSelection을 줌
  1107. // 다음부터는 선택한 레코드의 포커스가 남겨짐
  1108. GridEX_MapList.HideSelection = HideSelection.Highlight;
  1109. if (e.Row == null) return;
  1110. // GridEX_MapList의 레코드를 선택했을 때, Map_ID를 저장
  1111. _Data.Map_No = e.Row.Cells["Map_No"].Value.ToString();
  1112. // GridEX_InDevice와 GridEX_OutDevice 셋팅
  1113. GridEX_InOutDevice_IN_Map_SET();
  1114. }
  1115. // 비상방송 텍스트 클리어
  1116. EditBox_Area.Text = null;
  1117. EditBox_Stair.Text = null;
  1118. EditBox_Floor.Text = null;
  1119. }
  1120. //** 추가와 삭제버튼을 연속으로 사용 할 경우 삭제를 할수 없어 아래의 이벤트를 사용한다.
  1121. private void GridEX_GroupList_CurrentCellChanged(object sender, EventArgs e)
  1122. {
  1123. GridEX_GroupList.HideSelection = HideSelection.Highlight;
  1124. }
  1125. //** 추가와 삭제버튼을 연속으로 사용 할 경우 삭제를 할수 없어 아래의 이벤트를 사용한다.
  1126. private void GridEX_MapList_CurrentCellChanged(object sender, EventArgs e)
  1127. {
  1128. GridEX_MapList.HideSelection = HideSelection.Highlight;
  1129. }
  1130. //** GridEX_OutDevice을 마우스로 클릭하였을 발생하는 이벤트
  1131. private void GridEX_OutDevice_MouseClick(object sender, MouseEventArgs e)
  1132. {
  1133. //** 헤더부분을 클릭하였을 경우는 사용하지 못함
  1134. if (e.Y > 40)
  1135. {
  1136. //** 마우스 오른쪽 버튼일 경우
  1137. if (e.Button == System.Windows.Forms.MouseButtons.Right)
  1138. {
  1139. if (GridEX_OutDevice.CurrentRow == null)
  1140. {
  1141. return;
  1142. }
  1143. //** ID컬럼의 첫글자가 'G'일 경우
  1144. if (GridEX_OutDevice.CurrentRow.Cells["ID"].Value.ToString().Remove(1) == "G")
  1145. {
  1146. ContextMenuStrip_OutDeviceInfo.Items.Clear();
  1147. ContextMenuStrip_OutDeviceInfo.Items.Add(_Text.DeviceInfo); // 회로정보 확인
  1148. ContextMenuStrip_OutDeviceInfo.Show(GridEX_OutDevice, e.Location);
  1149. }
  1150. }
  1151. }
  1152. }
  1153. //** ContextMenuStrip의 항목을 클릭하였을 경우
  1154. private void ContextMenuStrip_OutDeviceInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  1155. {
  1156. // 컨텍스메뉴에서 회로정보 확인을 클릭하였을 경우
  1157. if (e.ClickedItem.Text == _Text.DeviceInfo) // 회로정보 확인
  1158. {
  1159. // 컨텍스트 항목을 클릭하여도 컨텍스 항목이 사라지지 않아서 클로우즈 시켜줌
  1160. ContextMenuStrip_OutDeviceInfo.Close();
  1161. // 폼 생성
  1162. _Data.MenuActivedForm = new Form_Check_Device(GridEX_OutDevice.CurrentRow.Cells["Receiver_ID"].Value.ToString());
  1163. _Form.Create(_Data.MenuActivedForm, null);
  1164. // Form_Check_Device폼으로 이벤트 발생
  1165. _Event.Form_ConfigMAP_SendMessage_Write(GridEX_OutDevice.CurrentRow.Cells["ID"].Value.ToString());
  1166. }
  1167. }
  1168. //** 비상방송코드 적용버튼
  1169. private void UiButton_Broadcastion_Apply_Click(object sender, EventArgs e)
  1170. {
  1171. if (EditBox_Area.Text.Length == 0)
  1172. {
  1173. // 비상방송코드 AREA를 입력해 주세요
  1174. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.AreaNotInput, 0);
  1175. return;
  1176. }
  1177. if (EditBox_Area.Text.Length != 2)
  1178. {
  1179. // 비상방송코드 AREA를 2자리로 입력해 주세요
  1180. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.AreaProblemInput, 0);
  1181. return;
  1182. }
  1183. if (EditBox_Stair.Text.Length == 0)
  1184. {
  1185. // 비상방송코드 STAIR를 입력해 주세요
  1186. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.StairNotInput, 0);
  1187. return;
  1188. }
  1189. if (EditBox_Stair.Text.Length != 2)
  1190. {
  1191. // 비상방송코드 STAIR를 2자리로 입력해 주세요
  1192. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.StairProblemInput, 0);
  1193. return;
  1194. }
  1195. if (EditBox_Floor.Text.Length == 0)
  1196. {
  1197. // 비상방송코드 FLOOR를 입력해 주세요
  1198. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FloorNotInput, 0);
  1199. return;
  1200. }
  1201. if (EditBox_Floor.Text.Length != 2)
  1202. {
  1203. // 비상방송코드 FLOOR를 2자리로 입력해 주세요
  1204. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FloorProblemInput, 0);
  1205. return;
  1206. }
  1207. // UPDATE로 해결하자
  1208. _Db.UPDATE("TB_EMERGENCY_BROADCASTION",
  1209. "RECEIVER_ID=" + Broadcation_Receiver +
  1210. ";COMM_ID=" + COMM_ID +
  1211. ";BOARD_ID=" + BOARD_ID +
  1212. ";LOOP_NO=" + LOOP_NO +
  1213. ";REPEATER_ID=" + REPEATER_ID +
  1214. ";DEVICE_ID=" + DEVICE_ID +
  1215. ";INOUT_TYPE=" + INOUT_TYPE,
  1216. "AREA_CODE=" + EditBox_Area.Text +
  1217. ";STAIR_CODE=" + EditBox_Stair.Text +
  1218. ";FLOOR_CODE=" + EditBox_Floor.Text);
  1219. // 저장하였습니다
  1220. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveInform, 0);
  1221. }
  1222. //** 비상방송코드 삭제버튼
  1223. private void UiButton_Broadcastion_Delete_Click(object sender, EventArgs e)
  1224. {
  1225. //** GridEX_InDevice에서 선택한 행의 갯수를 알기 위해서
  1226. int SelectRowCount = GridEX_InDevice.SelectedItems.Count;
  1227. //** 선택한 행이 없으면 팝업을 띄운다
  1228. if (SelectRowCount == 0)
  1229. {
  1230. // 먼저 입력디바이스를 선택해 주세요
  1231. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.InDeviceNotChoice, 0);
  1232. return;
  1233. }
  1234. if (EditBox_Area.Text.Length == 0 || EditBox_Stair.Text.Length == 0 || EditBox_Floor.Text.Length == 0)
  1235. {
  1236. // 삭제 할 수 없습니다
  1237. _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotDelete, 0);
  1238. return;
  1239. }
  1240. // 비상방송코드를 삭제하시겠습니까?
  1241. DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 300, 150, _Text.BroadcastionInfo_Delete_Continue, 0);
  1242. // 대화 팝업은 특별처리
  1243. _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeletBroadcastion);
  1244. }
  1245. //** 팝업에서 Yes, NO 에서 받은 이벤트 처리(비상방송코드 삭제버튼 클릭시)
  1246. public void _Event_PopupClose_SendMessage_Event_DeletBroadcastion(object sender, object etc)
  1247. {
  1248. // 대화 팝업 주체
  1249. Form popup = (Form)sender;
  1250. if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)
  1251. {
  1252. // 입력디바이스 삭제
  1253. _Db.Execute(_Sql.Delete_Table(
  1254. "TB_EMERGENCY_BROADCASTION", "RECEIVER_ID", Receiver_ID.ToString(), "COMM_ID", COMM_ID, "BOARD_ID", BOARD_ID,
  1255. "LOOP_NO", LOOP_NO, "REPEATER_ID", REPEATER_ID, "DEVICE_ID", DEVICE_ID, "INOUT_TYPE", INOUT_TYPE, Broadcation_Receiver));
  1256. // 텍스트 클리어
  1257. EditBox_Area.Text = null;
  1258. EditBox_Stair.Text = null;
  1259. EditBox_Floor.Text = null;
  1260. }
  1261. // 대화 팝업은 특별처리
  1262. _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeletBroadcastion);
  1263. }
  1264. private void GridEX_InDevice_CurrentCellChanging(object sender, CurrentCellChangingEventArgs e)
  1265. {
  1266. // 선택한 행이 없으면
  1267. if (e.Row == null) return;
  1268. Broadcation_Receiver = e.Row.Cells["Receiver_ID"].Value.ToString();
  1269. string InDevice = e.Row.Cells["ID"].Value.ToString();
  1270. // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE
  1271. MskDeviceIDString device_id = new MskDeviceIDString(InDevice, Broadcation_Receiver); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경
  1272. COMM_ID = device_id.Comm_id;
  1273. BOARD_ID = device_id.Board_id;
  1274. LOOP_NO = device_id.Loop_no;
  1275. REPEATER_ID = device_id.Repeater_id;
  1276. DEVICE_ID = device_id.Device_id;
  1277. INOUT_TYPE = device_id.Inout_type;
  1278. //
  1279. // 비상방송 출력
  1280. //
  1281. // 먼저 클릭할때 저장과 삭제 버튼을 활성화 시킨다.
  1282. UiButton_Broadcastion_Apply.Enabled = true;
  1283. UiButton_Broadcastion_Delete.Enabled = true;
  1284. // 먼저 텍스트 클리어
  1285. EditBox_Area.Text = null;
  1286. EditBox_Stair.Text = null;
  1287. EditBox_Floor.Text = null;
  1288. // 조회
  1289. //** TB_MAP 테이블에서 맵명을 모두 가지고 온다
  1290. DataRowCollection DB_TABLE_BROADCASTION = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_TB_EMERGENCY_BROADCASTION(
  1291. "TB_EMERGENCY_BROADCASTION", "COMM_ID", COMM_ID, "BOARD_ID", BOARD_ID,
  1292. "LOOP_NO", LOOP_NO, "REPEATER_ID", REPEATER_ID, "DEVICE_ID", DEVICE_ID, "INOUT_TYPE", INOUT_TYPE, Broadcation_Receiver));
  1293. if (DB_TABLE_BROADCASTION != null)
  1294. {
  1295. foreach (DataRow dr in DB_TABLE_BROADCASTION)
  1296. {
  1297. EditBox_Area.Text = dr[7].ToString();
  1298. EditBox_Stair.Text = dr[8].ToString();
  1299. EditBox_Floor.Text = dr[9].ToString();
  1300. }
  1301. }
  1302. // 조회해 왔는데 값이 없으면 저장과 삭제버튼 비활성화 시킨다
  1303. if (EditBox_Area.Text.Length == 0 || EditBox_Stair.Text.Length == 0 || EditBox_Floor.Text.Length == 0)
  1304. {
  1305. UiButton_Broadcastion_Apply.Enabled = false;
  1306. UiButton_Broadcastion_Delete.Enabled = false;
  1307. }
  1308. }
  1309. }
  1310. }