| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;using System.Data.SqlClient;using Janus.Windows.GridEX;using System.Collections;using Janus.Windows.GridEX.EditControls;namespace IControls_FireManager{    public partial class Form_ConfigMAP : Form    {        //** 용인성북용 : true , 신규용 : false        bool Yongin = false;        //** 대화 팝업용        Form DialogPopup = new Form();        //** TB_GROUP 테이블에서 현재 출력그룹리스트를 가지고 와서 OutDeviceGroup에 담기 위해서 사용        ArrayList OutDeviceGroupList = new ArrayList();        //** TB_Map 테이블에서 현재 맵리스트를 가지고 와서 OutDeviceGroup에 담기 위해서 사용        ArrayList MapList = new ArrayList();        //** 나중에 DB에 출력그룹을 ADD 할 때 수신기 ID도 알아야 한다        string Receiver_ID = null;        //** GridEX_GroupList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함        bool FirstUnuseGroup_CurrentCellChanging = true;        //** GridEX_MapList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함        bool FirstUnuseMap_CurrentCellChanging = true;        // 비상방송 출력을 위해서 변수 선언        int COMM_ID = 0;        int BOARD_ID = 0;        int LOOP_NO = 0;        int REPEATER_ID = 0;        int DEVICE_ID = 0;        string INOUT_TYPE = null;        string Broadcation_Receiver = null;        //** 생성자        public Form_ConfigMAP()        {            InitializeComponent();            ///            /// 이벤트 핸들러 등록            ///            //** Form_AddDevice폼에서 전달됨 -> 디바이스를 선택하고 추가버튼을 클릭하면 날아오는 이벤트            _Event.Form_AddDevice_SendMessage_Event += new _Event.Form_AddDevice_SendMessage_Handler(_Event_Form_AddDevice_SendMessage_Event);            //** Form_AddGroup폼에서 전달됨 -> 출력그룹을 선택하고 추가버튼을 클릭하면 날아오는 이벤트            _Event.Form_AddGroup_SendMessage_Event += new _Event.Form_AddGroup_SendMessage_Handler(_Event_Form_AddGroup_SendMessage_Event);            // 워크뷰에 그룹 및 연동설정 텝페이지 별로 작업하기 위한 이벤트            _Event.WorkViewPageName_Oper_SendMessage_Event +=new _Event.WorkViewPageName_Oper_SendMessage_Handler(_Event_WorkViewPageName_Oper_SendMessage_Event);            // 수신기 추가 및 편집 폼에서 작업 완료 이벤트 핸들러 등록            _Event.WorkViewPageName_Receiver_SendMessage_Event += new _Event.WorkViewPageName_Receiver_SendMessage_Handler(_Event_WorkViewPageName_Receiver_SendMessage_Event);            // 탭페이지 속성 (탭은 보여지지 않는다)            this.uiTab_DeviceDetailInfo.ShowTabs = false;        }        //** 폼클로우즈        private void Form_ConfigMAP_FormClosed(object sender, FormClosedEventArgs e)        {            // 이벤트 해제            _Event.Form_AddDevice_SendMessage_Event -= new _Event.Form_AddDevice_SendMessage_Handler(_Event_Form_AddDevice_SendMessage_Event);            _Event.Form_AddGroup_SendMessage_Event -= new _Event.Form_AddGroup_SendMessage_Handler(_Event_Form_AddGroup_SendMessage_Event);            _Event.WorkViewPageName_Oper_SendMessage_Event -= new _Event.WorkViewPageName_Oper_SendMessage_Handler(_Event_WorkViewPageName_Oper_SendMessage_Event);            _Event.WorkViewPageName_Receiver_SendMessage_Event += new _Event.WorkViewPageName_Receiver_SendMessage_Handler(_Event_WorkViewPageName_Receiver_SendMessage_Event);        }        // 프로젝트 열기 이벤트 대신 수신기 추가시에 다시 접속하도록 한다        public void _Event_WorkViewPageName_Receiver_SendMessage_Event(string RECEIVER_ID)        {            if (RECEIVER_ID != null)            {                //                // 데이타베이스 접근 경로 지정부                //                _Data.DataBaseFilePath_Set(null);//(RECEIVER_ID);            }        }        // 워크뷰에 그룹 및 연동설정 텝페이지 별로 작업하기 위한 이벤트        public void _Event_WorkViewPageName_Oper_SendMessage_Event(string RECEIVER_ID, Object_Type TypeName)        {            //** 폼로드시 Receiver ID 얻음            Receiver_ID = RECEIVER_ID;            //** 출력그룹에서 출력 그리드 클리어            GridEX_OutDevice_IN_Group.ClearItems();            //** 연동설정에서 입력, 출력 그리드 클리어            GridEX_InDevice.ClearItems();            GridEX_OutDevice.ClearItems();            switch (TypeName)            {                 case Object_Type.OPER_GROUP:                    this.TabPage_OutGroup.Selected = true;                    //** 폼로드시 출력그룹에 있는 GridEx 셋팅                    UI_OutDeviceGroup_GridEx_Initialize();                    break;                case Object_Type.OPER_SET:                    this.TabPage_ConfigMap.Selected = true;                    //** 폼로드시 연동설정에 있는 GridEx 셋팅                    UI_MapConfig_GridEx_Initialize();                    break;            }        }        //** Form_AddGroup폼에서 전달됨        public void _Event_Form_AddGroup_SendMessage_Event(DEVICE_EVENT EventName)        {            //** 출력그룹에서 그룹을 추가하고나서 갱신된 그룹을 다시 검색하라고 알려주는 이벤트            if (EventName == DEVICE_EVENT.MAP)            {                // GridEX_OutDevice_IN_Group 셋팅                GridEX_InOutDevice_IN_Map_SET();            }            //** 출력그룹에서 닫기버튼 클릭할때 다시 selection을 멀티로 할 수 있게 알려주는 이벤트            if (EventName == DEVICE_EVENT.MAP_SELECTIONMODE)            {                // 다시 속성을 MultipleSelection 바꿈                GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.MultipleSelection;            }        }        //** Form_AddDevice폼에서 전달됨        public void _Event_Form_AddDevice_SendMessage_Event(DEVICE_EVENT EventName)        {            //** 출력그룹에서 디바이스를 추가하고나서 갱신된 디바이스 다시 검색하라고 알려주는 이벤트            if (EventName == DEVICE_EVENT.GROUP)            {                // GridEX_OutDevice_IN_Group 셋팅                GridEX_OutDevice_IN_Group_SET();            }            //** 출력그룹에서 닫기버튼 클릭할때 다시 selection을 멀티로 할 수 있게 알려주는 이벤트            else if (EventName == DEVICE_EVENT.GROUP_SELECTIONMODE)            {                // 다시 속성을 MultipleSelection 바꿈                GridEX_GroupList.SelectionMode = Janus.Windows.GridEX.SelectionMode.MultipleSelection;            }            //** 연동설정에서 디바이스를 추가하고나서 갱신된 디바이스 다시 검색하라고 알려주는 이벤트            else if (EventName == DEVICE_EVENT.MAP)            {                // GridEX_OutDevice_IN_Group 셋팅                GridEX_InOutDevice_IN_Map_SET();            }            //** 연동설정에서 닫기버튼 클릭할때 다시 selection을 멀티로 할 수 있게 알려주는 이벤트            else if (EventName == DEVICE_EVENT.MAP_SELECTIONMODE)            {                // 다시 속성을 MultipleSelection 바꿈                GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.MultipleSelection;            }        }        //** 폼로드시 출력그룹에 있는 GridEx 셋팅        public void UI_OutDeviceGroup_GridEx_Initialize()        {            //            //** 폼로드 할 때, 먼저 GridEX_GroupList 클리어            //            // OutDeviceGroup ArraryList 클리어            OutDeviceGroupList.Clear();            // GridEX_GroupList 클리어            GridEX_GroupList.ClearItems();            // 마지막 GroupID를 저장            string Last_GroupID = null;            //** TB_GROUP 테이블에서 출력그룹을 모두 가지고 온다            DataRowCollection DB_TABLE_DEVICE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", null)); // 네트워크 수신기에서 그룹 아이디는 유일하다            if (DB_TABLE_DEVICE != null)            {                foreach (DataRow dr in DB_TABLE_DEVICE)                {                    // 모든 그룹이 들어있는 OutDeviceGroupList에 추가                    _OUTDEVIDE_GROUP OutDevice_Group = new _OUTDEVIDE_GROUP();                    OutDevice_Group.Receive_ID = Int32.Parse(dr["RECEIVER_ID"].ToString());                    OutDevice_Group.ID = dr["GROUP_ID"].ToString();                    OutDevice_Group.Group = dr["GROUP_NAME"].ToString();                    OutDeviceGroupList.Add(OutDevice_Group);                    // 해당 수신기에 있는 그룹만을 보여준다                    if (Receiver_ID == dr["RECEIVER_ID"].ToString())                    {                        GridEXRow row;                        row = GridEX_GroupList.AddItem();                        row.BeginEdit();                        row.Cells["ID"].Value = OutDevice_Group.ID;                        row.Cells["Group"].Value = OutDevice_Group.Group;                        row.EndEdit();                        // 마지막 GroupID를 저장                        Last_GroupID = OutDevice_Group.ID;                    }                }            }            //            //** 폼로드 할 때, 먼저 GridEX_GroupName 클리어            //            // GridEX_GroupName 클리어            GridEX_GroupName.ClearItems();            // 다음 설정하는 출력그룹 넘버를 출력하기 위해서            GridEXRow Row;            Row = GridEX_GroupName.AddItem();            Row.BeginEdit();            //            //** 이미 만들어진 용인현장용이 아니라면(신규) 그룹ID를 넣어준다            //            if (Yongin == false) // 일반 모든 현장            {                //** ID는 내부적으로 관리(입력 할 수 없다)                GridEX_GroupName.RootTable.Columns[1].EditType = EditType.NoEdit;                //** GROUP_ID 값을 결정하기 위해서                int MaxValue = 1;                //if (GridEX_GroupList.RowCount != 0)                //{                //    // 맥스값 찾기                //    string group_id = Last_GroupID.Remove(0, 1);                //    MaxValue = Int32.Parse(group_id) + 1;                //}                if(DB_TABLE_DEVICE != null)                     MaxValue = DB_TABLE_DEVICE.Count + 1;                // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다	                string id = "";                if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                     id = string.Format("{0:D6}", MaxValue);                else                     id = string.Format("{0:D4}", MaxValue);                Row.Cells["ID"].Value = "G" + id;            }            Row.EndEdit();        }        //** 폼로드시 연동설정에 있는 GridEx 셋팅        public void UI_MapConfig_GridEx_Initialize()        {            // 비상방송 텍스트 클리어            EditBox_Area.Text = null;            EditBox_Stair.Text = null;            EditBox_Floor.Text = null;            // 비상방송 저장 및 삭제 버튼 비활성화            UiButton_Broadcastion_Apply.Enabled = false;            UiButton_Broadcastion_Delete.Enabled = false;            //            //** 폼로드 할 때, 먼저 GridEX_MapList 클리어            //            // MapList ArraryList 클리어            MapList.Clear();            // GridEX_GroupList 클리어            GridEX_MapList.ClearItems();            // 마지막 Map_No를 저장            int Last_MapNo = 0;            //** TB_MAP 테이블에서 맵명을 모두 가지고 온다            DataRowCollection DB_TABLE_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP", "MAP_ID", Receiver_ID));            if (DB_TABLE_MAP != null)            {                foreach (DataRow dr in DB_TABLE_MAP)                {                    // 모든 맵명이 들어있는 MapList에 추가                    _MAP Map = new _MAP();                    Map.Receive_ID = Int32.Parse(dr["RECEIVER_ID"].ToString());                    Map.Map_No = Int32.Parse(dr["MAP_NO"].ToString());                    Map.ID = dr["MAP_ID"].ToString();                    Map.Map = dr["MAP_NAME"].ToString();                    MapList.Add(Map);                    // 해당 수신기에 있는 맵명만을 보여준다                    if (Receiver_ID == dr["RECEIVER_ID"].ToString())                    {                        GridEXRow row;                        row = GridEX_MapList.AddItem();                        row.BeginEdit();                        row.Cells["ID"].Value = Map.ID;                        row.Cells["Map"].Value = Map.Map;                        row.Cells["Map_No"].Value = Map.Map_No;                        row.EndEdit();                        // 마지막 Map_No를 저장                        Last_MapNo = Map.Map_No;                    }                }            }            //            //** 폼로드 할 때, 먼저 GridEX_MapName 클리어            //            // GridEX_MapName 클리어            GridEX_MapName.ClearItems();            // 다음 설정하는 맵 넘버를 출력하기 위해서            GridEXRow Row;            Row = GridEX_MapName.AddItem();            Row.BeginEdit();            //            //** 이미 만들어진 용인현장용이 아니라면(신규) 그룹ID로 넣어준다            //            if (Yongin == false)  // 일반 모든 현장            {                //** ID는 내부적으로 관리(입력 할 수 없다)                GridEX_MapName.RootTable.Columns[1].EditType = EditType.NoEdit;                //                //** MAP_ID 값을 결정하기 위해서(수신기별로 유니크한게 아니라 전체에서 유니크함)                //                int MaxValue = 1;                //** TB_MAP 테이블에서 맵명을 모두 가지고 온다                DataRowCollection DB_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Get_ColumnMaxValue("TB_MAP","MAP_NO"));                foreach (DataRow Record in DB_MAP)                {                    // 데이타가 아무것도 없다                    if (Record[0].ToString().Length != 0)                    {                        //DB에 저장되어 있는 레코드 수를 알자                        MaxValue = Int32.Parse(Record[0].ToString()) + 1;                    }                }                                // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다	                string id = "";                if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                    id = string.Format("{0:D6}", MaxValue);                  else                    id = string.Format("{0:D4}", MaxValue);                  Row.Cells["ID"].Value = "M" + id;                           }            Row.EndEdit();        }        //** 해당 출력그룹에 출력 디바이스를 셋팅하는 함수        public void GridEX_OutDevice_IN_Group_SET()        {            // 먼저 클리어 시키고 시작            GridEX_OutDevice_IN_Group.ClearItems();            // No.를 출력하기 위해서            int i = 1;            //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다            DataRowCollection DB_TABLE_DEVICE = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Gruop_DeviceTable(_Data.Group_ID, Receiver_ID));            if (DB_TABLE_DEVICE != null)            {                foreach (DataRow dr in DB_TABLE_DEVICE)                {                    try                    {                        if (_Convert.Exception_Into_object(dr[6], dr[7], dr[8], dr[9], dr[10]) == true)                        {                            // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                            MskDeviceIDString dev_s = new MskDeviceIDString(                                _Convert.Null_to_IntZero(dr[6].ToString()),                                _Convert.Null_to_IntZero(dr[7].ToString()),                                _Convert.Null_to_IntZero(dr[8].ToString()),                                _Convert.Null_to_IntZero(dr[9].ToString()),                                _Convert.Null_to_IntZero(dr[10].ToString()),                                dr[11].ToString(), dr[15].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                            GridEXRow row;                            row = GridEX_OutDevice_IN_Group.AddItem();                            row.BeginEdit();                            row.Cells["Number"].Value = i++;                            row.Cells["Receiver_ID"].Value = dr[15].ToString();  // 추가                            row.Cells["ID"].Value = dev_s.MskId;                            row.Cells["DeviceType"].Value = dr[0].ToString();                            row.Cells["Position"].Value = dr[1].ToString();                            row.Cells["DeviceName"].Value = dr[2].ToString();                            row.EndEdit();                        }                    }                    catch (Exception e)                    {                        // LOG                                        _Event.DebugView_SendMessage_Write(e.ToString());                        // 정보를 가지고 오는데 문제가 발생하였습니다                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.ProblemMessage, 0);                    }                }            }        }        //** 해당 맵명에 디바이스와 그룹를 셋팅하는 함수        public void GridEX_InOutDevice_IN_Map_SET()        {            //            //GridEX_InDevice            //            // 먼저 클리어 시키고 시작            GridEX_InDevice.ClearItems();            // No.를 출력하기 위해서            int i = 1;            //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다            DataRowCollection DB_TABLE_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(_Data.Map_No, "I", Receiver_ID));            if (DB_TABLE_MAP_PROCESS != null)            {                foreach (DataRow dr in DB_TABLE_MAP_PROCESS)                {                    try                    {                        if (_Convert.Exception_Into_object(dr[7], dr[8], dr[9], dr[10], dr[11]) == true)                        {                            // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                            MskDeviceIDString dev_s = new MskDeviceIDString(                                _Convert.Null_to_IntZero(dr[7].ToString()),                                _Convert.Null_to_IntZero(dr[8].ToString()),                                _Convert.Null_to_IntZero(dr[9].ToString()),                                _Convert.Null_to_IntZero(dr[10].ToString()),                                _Convert.Null_to_IntZero(dr[11].ToString()),                                dr[12].ToString(), dr[6].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                            GridEXRow row;                            row = GridEX_InDevice.AddItem();                            row.BeginEdit();                            row.Cells["Number"].Value = i++;                            row.Cells["Receiver_ID"].Value = dr[6].ToString();  // 추가                            row.Cells["ID"].Value = dev_s.MskId;                            row.Cells["DeviceType"].Value = dr[0].ToString();                            row.Cells["Position"].Value = dr[1].ToString();                            row.Cells["DeviceName"].Value = dr[2].ToString();                            row.EndEdit();                        }                    }                    catch (Exception e)                    {                        // LOG                                        _Event.DebugView_SendMessage_Write(e.ToString());                        // 정보를 가지고 오는데 문제가 발생하였습니다                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.ProblemMessage, 0);                    }                }                //                //GridEX_OutDevice                //                // 먼저 클리어 시키고 시작                GridEX_OutDevice.ClearItems();                // No.를 출력하기 위해서                int j = 1;                //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다                DataRowCollection DB_TB_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(_Data.Map_No, "O", "D", Receiver_ID));                if (DB_TB_MAP_PROCESS != null)                {                    foreach (DataRow dr in DB_TB_MAP_PROCESS)                    {                        try                        {                            if (_Convert.Exception_Into_object(dr[7], dr[8], dr[9], dr[10], dr[11]) == true)                            {                                // 매개변수 순서 => COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                                MskDeviceIDString dev_s = new MskDeviceIDString(                                    _Convert.Null_to_IntZero(dr[7].ToString()),                                    _Convert.Null_to_IntZero(dr[8].ToString()),                                    _Convert.Null_to_IntZero(dr[9].ToString()),                                    _Convert.Null_to_IntZero(dr[10].ToString()),                                    _Convert.Null_to_IntZero(dr[11].ToString()),                                    dr[12].ToString(), dr[6].ToString()); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                                GridEXRow row;                                row = GridEX_OutDevice.AddItem();                                row.BeginEdit();                                row.Cells["Number"].Value = j++;                                row.Cells["Receiver_ID"].Value = dr[6].ToString();  // 추가                                row.Cells["ID"].Value = dev_s.MskId;                                row.Cells["DeviceType"].Value = dr[0].ToString();                                row.Cells["Position"].Value = dr[1].ToString();                                row.Cells["DeviceName"].Value = dr[2].ToString();                                row.Cells["ProcessType"].Value = dr[4].ToString();                                row.EndEdit();                            }                        }                        catch (Exception e)                        {                            // LOG                                            _Event.DebugView_SendMessage_Write(e.ToString());                            // 정보를 가지고 오는데 문제가 발생하였습니다                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.ProblemMessage, 0);                        }                    }                }                //** TB_GROUP_DEVICE 테이블에서 해당그룹을 모두 가지고 와서 GridEX_OutDevice_IN_Group에 보여준다                DataRowCollection DB_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.Search_Map_ProcessTable(_Data.Map_No, "O", "G", Receiver_ID));                if (DB_MAP_PROCESS != null)                {                    foreach (DataRow dr in DB_MAP_PROCESS)                    {                        // TB_GROUP 테이블에 접근                        DataRowCollection DB_TABLE_TB_DEVICE_TYPE = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_GROUP", "GROUP_ID", dr[5].ToString(), null)); // 맵연동 설정에서 확인하는 출력그룹은 오로지 그룹아이디로만 판단                        if (DB_TABLE_TB_DEVICE_TYPE != null)                        {                            foreach (DataRow Dr in DB_TABLE_TB_DEVICE_TYPE)                            {                                GridEXRow row;                                row = GridEX_OutDevice.AddItem();                                row.BeginEdit();                                row.Cells["Number"].Value = j++;                                row.Cells["Receiver_ID"].Value = Dr[0].ToString();                                row.Cells["ID"].Value = dr[5].ToString();                                row.Cells["DeviceName"].Value = Dr[2].ToString();                                row.Cells["ProcessType"].Value = dr[4].ToString();                                row.EndEdit();                            }                        }                    }                }            }            // 비상방송 텍스트 클리어            EditBox_Area.Text = null;            EditBox_Stair.Text = null;            EditBox_Floor.Text = null;            // 비상방송 저장과 삭제버튼도 비활성화            UiButton_Broadcastion_Apply.Enabled = false;            UiButton_Broadcastion_Delete.Enabled = false;        }        //** 입력 회로 추가 버튼 - 연동설정에 있는 입력회로        private void UiButton_AddInDevice_Click(object sender, EventArgs e)        {            //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다            if (GridEX_MapList.SelectedItems.Count == 1 && GridEX_MapList.HideSelection == HideSelection.Highlight)            {                _Data.MenuActivedForm = new Form_AddDevice(Receiver_ID, "Map", "I");                _Form.Create(_Data.MenuActivedForm, null);                //** 디바이스추가폼이 로드되면 GridEX_MapList에서 단지 하나만 선택할 수 있도록 한다                GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;            }            else            {                // 맵명을 하나만 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapChoiceOnlyOne, 0);            }        }        //** 입력 회로 삭제 버튼 - 연동설정에 있는 입력회로        private void UiButton_DeleteIn_Click(object sender, EventArgs e)        {            //** GridEX_InDevice에서 선택한 행의 갯수를 알기 위해서            int SelectRowCount = GridEX_InDevice.SelectedItems.Count;            //** 선택한 행이 없으면 팝업을 띄운다            if (SelectRowCount == 0)            {                // 삭제할 입력을 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.DelInNotChoice, 0);                return;            }            for (int number = 0; number < SelectRowCount; number++)            {                GridEXRow row = GridEX_InDevice.SelectedItems[number].GetRow();                string Real_RECEIVER_ID = row.Cells["Receiver_ID"].Value.ToString();                string Device_ID = row.Cells["ID"].Value.ToString();                // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                MskDeviceIDString device_id = new MskDeviceIDString(Device_ID, Real_RECEIVER_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                // 입력디바이스 삭제                _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,                                       "LOOP_NO", device_id.Loop_no, "REPEATER_ID", device_id.Repeater_id,                                       "DEVICE_ID", device_id.Device_id, "INOUT_TYPE", device_id.Inout_type,                                        "MAP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));            }            // 다시 읽어들임            GridEX_InOutDevice_IN_Map_SET();            ////** 시컨스 문제 해결 -> 중간에 있는 입력을 삭제해 버리면 시컨스가 틀어진다            //DataRowCollection DB_TABLE_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP_PROCESS", "MAP_NO", _Data.Map_No, "MAP_TYPE", "I"));            //int i = 1;            //if (DB_TABLE_MAP_PROCESS != null)            //{            //    foreach (DataRow dr in DB_TABLE_MAP_PROCESS)            //    {            //        // UPDATE로 해결하자            //        _Db.UPDATE("TB_MAP_PROCESS",            //         "MAP_NO=" + _Data.Map_No +            //         ";SEQ_NO=" + dr[3].ToString(),            //        "SEQ_NO=" + i++);            //    }            //}            // GridEX_InOutDevice_IN_Map_SET 셋팅        }        //** 출력 회로 추가 버튼 - 연동설정에 있는 출력회로        private void UiButton_AddOutDevice_Click(object sender, EventArgs e)        {            //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다            if (GridEX_MapList.SelectedItems.Count == 1 && GridEX_MapList.HideSelection == HideSelection.Highlight)            {                _Data.MenuActivedForm = new Form_AddDevice(Receiver_ID, "Map", "O");                _Form.Create(_Data.MenuActivedForm, null);                //** 디바이스추가폼이 로드되면 GridEX_MapList에서 단지 하나만 선택할 수 있도록 한다                GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;            }            else            {                // 맵명을 하나만 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapChoiceOnlyOne, 0);            }        }        //** 출력 회로 삭제 버튼 - 연동설정에 있는 출력회로        private void UiButton_DeleteOut_Click(object sender, EventArgs e)        {            //** GridEX_OutDevice에서 선택한 행의 갯수를 알기 위해서            int SelectRowCount = GridEX_OutDevice.SelectedItems.Count;            //** 선택한 행이 없으면 팝업을 띄운다            if (SelectRowCount == 0)            {                // 삭제할 출력을 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.DelOutNotChoice, 0);                return;            }            for (int number = 0; number < SelectRowCount; number++)            {                GridEXRow row = GridEX_OutDevice.SelectedItems[number].GetRow();                string Real_RECEIVER_ID = row.Cells["Receiver_ID"].Value.ToString();                if (row.Cells["ProcessType"].Value.ToString() == "D")                {                    string Device_ID = row.Cells["ID"].Value.ToString();                    // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                    MskDeviceIDString device_id = new MskDeviceIDString(Device_ID, Real_RECEIVER_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                    // 출력디바이스 삭제                    _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,                                           "LOOP_NO", device_id.Loop_no, "REPEATER_ID", device_id.Repeater_id,                                           "DEVICE_ID", device_id.Device_id, "INOUT_TYPE", device_id.Inout_type,                                           "MAP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));                }                else if (row.Cells["ProcessType"].Value.ToString() == "G")                {                    // 출력그룹 삭제                    _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));                }            }            // 다시 읽어들임            GridEX_InOutDevice_IN_Map_SET();        }        //** 출력 그룹 추가 버튼 - 연동설정에 있는 출력그룹        private void UiButton_AddOutGroup_Click(object sender, EventArgs e)        {            //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다            if (GridEX_MapList.SelectedItems.Count == 1 && GridEX_MapList.HideSelection == HideSelection.Highlight)            {                _Data.MenuActivedForm = new Form_AddGroup(Receiver_ID);                _Form.Create(_Data.MenuActivedForm, null);                //** 디바이스추가폼이 로드되면 GridEX_MapList에서 단지 하나만 선택할 수 있도록 한다                GridEX_MapList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;            }            else            {                // 맵명을 하나만 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapChoiceOnlyOne, 0);            }        }        //** 출력 회로 추가 버튼 - 출력을 그룹으로 묶을때        private void UiButton_AddOutDevice_InGroup_Click(object sender, EventArgs e)        {            //** 출력그룹을 단지 하나만 선택했을 때 출력회로 추가폼이 활성화 될수 있다            if (GridEX_GroupList.SelectedItems.Count == 1 && GridEX_GroupList.HideSelection == HideSelection.Highlight)            {                _Data.MenuActivedForm = new Form_AddDevice(Receiver_ID, "Group", "O");                _Form.Create(_Data.MenuActivedForm, null);                //** 디바이스추가폼이 로드되면 GridEX_GroupList에서 단지 하나만 선택할 수 있도록 한다                GridEX_GroupList.SelectionMode = Janus.Windows.GridEX.SelectionMode.SingleSelection;                // 프로젝트 수정                _Data.ProJect_Save_Complete = false;            }            else            {                // 출력그룹명을 하나만 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupChoiceOnlyOne, 0);            }        }        //** 출력 회로 삭제 버튼 - 특정 출력그룹에서 특정 출력디바이스 삭제        private void UiButton_DeleteOutDevice_IN_Group_Click(object sender, EventArgs e)        {            //** GridEX_OutDevice_IN_Group에서 선택한 행의 갯수를 알기 위해서            int SelectRowCount = GridEX_OutDevice_IN_Group.SelectedItems.Count;            //** 선택한 행이 없으면 팝업을 띄운다            if (SelectRowCount == 0)            {                // 삭제할 회로를 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.DelDeviceNotChoice, 0);                return;            }            for (int number = 0; number < SelectRowCount; number++)            {                GridEXRow row = GridEX_OutDevice_IN_Group.SelectedItems[number].GetRow();                string Real_RECEIVER_ID = row.Cells["Receiver_ID"].Value.ToString();                string Device_ID = row.Cells["ID"].Value.ToString();                // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE                MskDeviceIDString device_id = new MskDeviceIDString(Device_ID, Real_RECEIVER_ID); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경                // 출력디바이스 삭제                _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,                                       "LOOP_NO", device_id.Loop_no, "REPEATER_ID", device_id.Repeater_id,                                       "DEVICE_ID", device_id.Device_id, "INOUT_TYPE", device_id.Inout_type,                                       "GROUP_RECEIVER_ID", Receiver_ID, Real_RECEIVER_ID));            }            // 프로젝트 수정            _Data.ProJect_Save_Complete = false;            // 다시 읽어들임            GridEX_OutDevice_IN_Group_SET();        }        //** 출력그룹 추가 버튼        private void UiButton_AddGroupName_Click(object sender, EventArgs e)        {            // 수신기1 G001 수신기1-1            // 수신기1 G002 수신기1-2            // 수신기1 G003 수신기1-3            // 수신기2 G001 수신기2-1            // 수신기2 G002 수신기2-2            // 수신기2 G003 수신기2-3            string GROUP_ID = null;            string GROUP_NAME = null;            //** 일단 입력한 출력그룹 ID 와 출력그룹명을 알아야 한다            //** GridEX_GroupName에서 그룹            GridEXRow[] GridEx_Rows = GridEX_GroupName.GetRows();            // foreach문이지만 무조건 1개의 행만 있으니 한번만 실행            foreach (GridEXRow row in GridEx_Rows)            {                GROUP_ID = row.Cells["ID"].Text;                GROUP_NAME = row.Cells["Group"].Text;            }            //// 용인성북 현장용(일단 주석처리)            ////** 그룹ID를 입력하지 않았을 경우            //if(GROUP_ID.Length == 0)            //{            //    // 그룹ID를 입력해 주세요            //    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupIDNotInput, 0);            //    return;            //}            //** 그룹명을 입력하지 않았을 경우            if(GROUP_NAME.Length == 0)            {                 // 출력그룹명을 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupNameNotInput, 0);                return;            }            //// 용인성북 현장용(일단 주석처리)            ////** 입력한 그룹ID가 DB에 있을 경우            //foreach (_OUTDEVIDE_GROUP row in OutDeviceGroupList)            //{            //    if(row.ID == GROUP_ID)            //    {            //        // 동일한 그룹ID가 이미 존재합니다            //        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupIDAlreadyHave, 0);            //        return;            //    }                 //}            //** 해당 수신기에 동일한 그룹명이 존재하는지 확인            // 일단하지말자            // "TB_GROUP"에 DB 삽입            _Db.ADD("TB_GROUP",            "RECEIVER_ID=" + Receiver_ID +            ";GROUP_ID=" + GROUP_ID +            ";GROUP_NAME=" + GROUP_NAME +            ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));            //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.            // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다            _Data.Group_ID = null;            // 여기서부터 새롭게 구성            //** 모든 그룹이 들어있는 OutDeviceGroupList에 추가            _OUTDEVIDE_GROUP OutDevice_Group = new _OUTDEVIDE_GROUP();            OutDevice_Group.Receive_ID = Int32.Parse(Receiver_ID);            OutDevice_Group.ID = GROUP_ID;            OutDevice_Group.Group = GROUP_NAME;            OutDeviceGroupList.Add(OutDevice_Group);            //** GridEx 추가            GridEXRow ROW;            ROW = GridEX_GroupList.AddItem();            ROW.BeginEdit();            ROW.Cells["ID"].Value = GROUP_ID;            ROW.Cells["Group"].Value = GROUP_NAME;            ROW.EndEdit();            //** 다음 순서를 GridEX_GroupName에 올리자            // GridEX_GroupName 클리어            GridEX_GroupName.ClearItems();            // 다음 설정하는 출력그룹 넘버를 출력하기 위해서            GridEXRow Row;            Row = GridEX_GroupName.AddItem();            Row.BeginEdit();            // 맥스값 찾기            string group_id = GROUP_ID.Remove(0, 1);            int MaxValue = Int32.Parse(group_id) + 1;            // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다            string id = "";            if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                id = string.Format("{0:D6}", MaxValue);            else                id = string.Format("{0:D4}", MaxValue);            Row.Cells["ID"].Value = "G" + id;            Row.EndEdit();            // 여기까지 새롭게 구성            //** GridEX_OutDevice_IN_Group 클리어시켜줌            GridEX_OutDevice_IN_Group.ClearItems();            //** GridEX_GroupList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용            // 그룹명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다            // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다            GridEX_GroupList.HideSelection = HideSelection.HideSelection;            // 프로젝트 수정            _Data.ProJect_Save_Complete = false;        }        //** 출력그룹 삭제 버튼        private void UiButton_DeleteGroupName_Click(object sender, EventArgs e)        {            //** GridEX_GroupList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용            // 그룹명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다            // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다            if (GridEX_GroupList.HideSelection == HideSelection.HideSelection)            {                // 삭제 하실 출력그룹을 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.GroupNotChoice, 0);                return;            }            // 선택한 출력그룹을 삭제하시겠습니까?            DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 300, 150, _Text.GroupDelete_Continue, 0);            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteOutGroup);        }        //** 팝업에서 Yes, NO 에서 받은 이벤트 처리(출력그룹 삭제시)        public void _Event_PopupClose_SendMessage_Event_DeleteOutGroup(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            int SelectRowCount = GridEX_GroupList.SelectedItems.Count;            if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)            {                DataRowCollection DB_TB_MAP_PROCESS = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP_PROCESS", "GROUP_ID", _Data.Group_ID, Receiver_ID));                if (DB_TB_MAP_PROCESS != null)                {                    // 연동설정에서 해당 그룹이 설정되어 있다면 삭제 할 수 없도록 한다                    if (DB_TB_MAP_PROCESS.Count != 0)                    {                        // 연동설정에서 해당 그룹이 설정되어 있어서 삭제 할 수 없습니다                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 500, 150, _Text.GroupNotdelete, 0);                    }                    else // 연동설정에서 해당 그룹이 설정되어 있지 않다면 삭제 할 수 있음                    {                        // Deep Copy (깊은 복사)                        object Copy_OutDeviceGroupList = OutDeviceGroupList.Clone();                        int Selected_Count = GridEX_GroupList.SelectedItems.Count;                        // 출력 그룹도 멀티로 삭제 가능                        for (int number = 0; number < Selected_Count; number++)                        {                            GridEXRow row = GridEX_GroupList.SelectedItems[0].GetRow();                            string Group_ID = row.Cells["ID"].Value.ToString();                            //** DB에서 삭제                            // 출력그룹 삭제                            _Db.Execute(_Sql.Delete_Table("TB_GROUP", "GROUP_ID", Group_ID, Receiver_ID));                            // 해당 그룹에 연동되어 있는 출력디바이스 삭제                            _Db.Execute(_Sql.Delete_Table("TB_GROUP_DEVICE", "GROUP_ID", Group_ID, "GROUP_RECEIVER_ID", Receiver_ID, null));                            //** 리스트에서 삭제                            foreach (_OUTDEVIDE_GROUP OutDevice_Group in (ArrayList)Copy_OutDeviceGroupList)                            {                                // 동일한 수신기 ID와 그룹 ID를 가지면 삭제                                if (OutDevice_Group.Receive_ID.ToString() == Receiver_ID && OutDevice_Group.ID == Group_ID)                                {                                    // 리스트에서 삭제                                    OutDeviceGroupList.Remove(OutDevice_Group);                                    // UI에서 삭제                                    row.Cells.Row.Delete();                                    break;                                }                            }                        }                        //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.                        // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다                        _Data.Group_ID = null;                        // 삭제가 되었으니까 다음 순서(GroupID)를 다시 잡아주자                        // GridEX_GroupName 클리어                        GridEX_GroupName.ClearItems();                        // 총 갯수 파악하기 위해                        GridEXRow[] GridEx_Rows = GridEX_GroupList.GetRows();                        int MaxValue = 1;                        // 삭제하였는데 등록되어 있는 그룹이 있다                        if (GridEx_Rows.Count() != 0)                        {                                     // 맥스값 찾기                            string group_id = GridEx_Rows[GridEx_Rows.Count() - 1].Cells["ID"].Value.ToString().Remove(0, 1);                            MaxValue = Int32.Parse(group_id) + 1;                        }                        // 다음 설정하는 출력그룹 넘버를 출력하기 위해서                        GridEXRow Row;                        Row = GridEX_GroupName.AddItem();                        Row.BeginEdit();                        // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다                        string id = "";                        if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                            id = string.Format("{0:D6}", MaxValue);                        else                            id = string.Format("{0:D4}", MaxValue);                        Row.Cells["ID"].Value = "G" + id;                        Row.EndEdit();                        //** GridEX_OutDevice_IN_Group 클리어시켜줌                        GridEX_OutDevice_IN_Group.ClearItems();                        //** GridEX_GroupList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용                        // 그룹명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다                        // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다                        GridEX_GroupList.HideSelection = HideSelection.HideSelection;                    }                }                // 프로젝트 수정                _Data.ProJect_Save_Complete = false;            }            // 대화 팝업은 특별처리(이벤트 해제)            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteOutGroup);        }        //** GridEX_GroupList를 클릭할 때 발생        private void GridEX_GroupList_CurrentCellChanging(object sender, CurrentCellChangingEventArgs e)        {            // GridEX_GroupList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함            if (FirstUnuseGroup_CurrentCellChanging == true)            {                // 다음부터는 사용 가능                FirstUnuseGroup_CurrentCellChanging = false;                if (e.Row == null) return;                // GridEX_GroupList의 레코드를 선택했을 때, Group_ID를 저장                _Data.Group_ID = e.Row.Cells["ID"].Value.ToString();                // GridEX_OutDevice_IN_Group 셋팅                GridEX_OutDevice_IN_Group_SET();            }            else            {                // 맨처음 로드 될때 GridEX_GroupList에 행이 선택되어 있는 것을 방지하기 위해서 HideSelection 속성에 HideSelection을 줌                // 다음부터는 선택한 레코드의 포커스가 남겨짐                GridEX_GroupList.HideSelection = HideSelection.Highlight;                if (e.Row == null) return;                // GridEX_GroupList의 레코드를 선택했을 때, Group_ID를 저장                _Data.Group_ID = e.Row.Cells["ID"].Value.ToString();                // GridEX_OutDevice_IN_Group 셋팅                GridEX_OutDevice_IN_Group_SET();            }        }        //** 맵 추가 버튼        private void UiButton_AddMapName_Click(object sender, EventArgs e)        {            string MAP_ID = null;            string MAP_NAME = null;            //** 일단 입력한 출력그룹 ID 와 출력그룹명을 알아야 한다            //** GridEX_GroupName에서 그룹            GridEXRow[] GridEx_Rows = GridEX_MapName.GetRows();            foreach (GridEXRow row in GridEx_Rows)            {                MAP_ID = row.Cells["ID"].Text;                MAP_NAME = row.Cells["Map"].Text;            }            //// 용인성북 현장용(일단 주석처리)            ////** 맵ID를 입력하지 않았을 경우            //if (MAP_ID.Length == 0)            //{            //    // 맵ID를 입력해 주세요            //    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapIDNotInput, 0);            //    return;            //}            //** 맵명을 입력하지 않았을 경우            if (MAP_NAME.Length == 0)            {                // 맵명을 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapNameNotInput, 0);                return;            }            //// 용인성북 현장용(일단 주석처리)            ////** 입력한 맵ID가 DB에 있을 경우            //foreach (_MAP row in MapList)            //{            //    if (row.ID == MAP_ID)            //    {            //        // 동일한 맵ID가 이미 존재합니다            //        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapIDAlreadyHave, 0);            //        return;            //    }            //}            //** 어레이리스트 MapList의 가장 마지막 행의 MAP_NO 값을 가지고 온다            //_MAP Map = (_MAP)MapList[MapList.Count - 1];            int MAP_NO = Int32.Parse(MAP_ID.Remove(0, 1));            // "TB_MAP"에 DB 삽입            _Db.ADD("TB_MAP",            "RECEIVER_ID=" + Receiver_ID +            ";MAP_NO=" + MAP_NO +            ";MAP_ID=" + MAP_ID +            ";MAP_NAME=" + MAP_NAME +            ";USE_FLAG=" + "Y" +             ";UPDATE_TIME=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));            //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.            // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다            _Data.Map_No = null;            // 여기서부터 새롭게 구성            _MAP Map = new _MAP();            Map.Receive_ID = Int32.Parse(Receiver_ID);            Map.Map_No = MAP_NO;            Map.ID = MAP_ID;            Map.Map = MAP_NAME;            MapList.Add(Map);            //** GridEx 추가            GridEXRow ROW;            ROW = GridEX_MapList.AddItem();            ROW.BeginEdit();            ROW.Cells["ID"].Value = MAP_ID;            ROW.Cells["Map"].Value = MAP_NAME;            ROW.Cells["Map_No"].Value = MAP_NO;            ROW.EndEdit();            //** 다음 순서를 GridEX_MapName에 올리자            // GridEX_MapName 클리어            GridEX_MapName.ClearItems();            // 다음 설정하는 맵명 넘버를 출력하기 위해서            GridEXRow Row;            Row = GridEX_MapName.AddItem();            Row.BeginEdit();            // 맥스값 찾기            string map_id = MAP_ID.Remove(0, 1);            int MaxValue = Int32.Parse(map_id) + 1;            // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다	            string id = "";            if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                id = string.Format("{0:D6}", MaxValue);            else                id = string.Format("{0:D4}", MaxValue);            Row.Cells["ID"].Value = "M" + id;                         Row.EndEdit();            //** 여기까지 새롭게 구성            //** GridEX_InDevice 클리어시켜줌            GridEX_InDevice.ClearItems();            //** GridEX_OutDevice 클리어시켜줌            GridEX_OutDevice.ClearItems();            //** GridEX_MapList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용            // 맵명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다            // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다            GridEX_MapList.HideSelection = HideSelection.HideSelection;            // 프로젝트 수정            _Data.ProJect_Save_Complete = false;        }        //** 맵 삭제 버튼        private void UiButton_DeleteMapName_Click(object sender, EventArgs e)        {            //** GridEX_MapList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용            // 맵명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다            // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다            if (GridEX_MapList.HideSelection == HideSelection.HideSelection)            {                // 삭제할 맵명을 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.MapNotChoice, 0);                return;            }            // 선택한 맵명을 삭제하시겠습니까?            DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 300, 150, _Text.MapDelete_Continue, 0);            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteMap);        }        //** 팝업에서 Yes, NO 에서 받은 이벤트 처리(맵 삭제시)        public void _Event_PopupClose_SendMessage_Event_DeleteMap(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            int SelectRowCount = GridEX_MapList.SelectedItems.Count;            if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)            {                // Deep Copy (깊은 복사)                object Copy_MapList = MapList.Clone();                int Selected_Count = GridEX_MapList.SelectedItems.Count;                // 맵명도 멀티로 삭제 가능                for (int number = 0; number < Selected_Count; number++)                {                    GridEXRow row = GridEX_MapList.SelectedItems[0].GetRow();                    string Map_No = row.Cells["Map_No"].Value.ToString();                    //** DB에서 삭제                    // 맵명 삭제                    _Db.Execute(_Sql.Delete_Table("TB_MAP", "MAP_NO", Map_No, Receiver_ID));                    // 해당 맵명에 연동되어 있는 그룹이나 입출력 디바이스 삭제                    _Db.Execute(_Sql.Delete_Table("TB_MAP_PROCESS", "MAP_NO", Map_No, "MAP_RECEIVER_ID", Receiver_ID, null));                    //** 리스트에서 삭제                    foreach (_MAP Map in (ArrayList)Copy_MapList)                    {                        // 동일한 수신기 ID와 그룹 ID를 가지면 삭제                        if (Map.Receive_ID.ToString() == Receiver_ID && Map.Map_No.ToString() == Map_No)                        {                            // 리스트에서 삭제                            MapList.Remove(Map);                            // UI에서 삭제                            row.Cells.Row.Delete();                            break;                        }                    }                }                //** 회로추가나 그룹추가폼을 띄워둔 상태에서 그룹명이나 맵명을 추가하거나 삭제하면 selected 된 행이 없어진다.                // 하지만 회로추가나 그룹추가는 할 수 있으므로 이를 방지해야한다                _Data.Map_No = null;                // 삭제가 되었으니까 다음 순서(MapID)를 다시 잡아주자                // GridEX_MapName 클리어                GridEX_MapName.ClearItems();                //                //** MAP_ID 값을 결정하기 위해서(수신기별로 유니크한게 아니라 전체에서 유니크함)                //                int MaxValue = 1;                //** TB_MAP 테이블에서 맵명을 모두 가지고 온다                DataRowCollection DB_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.Get_ColumnMaxValue("TB_MAP", "MAP_NO"));                foreach (DataRow Record in DB_MAP)                {                    // 데이타가 아무것도 없다                    if (Record[0].ToString().Length != 0)                    {                        //DB에 저장되어 있는 레코드 수를 알자                        MaxValue = Int32.Parse(Record[0].ToString()) + 1;                    }                }                // 다음 설정하는 맵명 넘버를 출력하기 위해서                GridEXRow Row;                Row = GridEX_MapName.AddItem();                Row.BeginEdit();                // 그룹아이디와 맵아이디는 기존에 4자리에서 6자리다	                string id = "";                if (_Data.Project_MapGroupIDTypeNumber == "6") // cyim 2016.04.01 : 6자리 혹은 4자리로 맵아이디와 그룹아이디 지정할수 있도록함	                    id = string.Format("{0:D6}", MaxValue);                else                    id = string.Format("{0:D4}", MaxValue);                Row.Cells["ID"].Value = "M" + id;                                 Row.EndEdit();                //** GridEX_InDevice 클리어시켜줌                GridEX_InDevice.ClearItems();                //** GridEX_OutDevice 클리어시켜줌                GridEX_OutDevice.ClearItems();                //** GridEX_MapList는 이상하게 처음에 하나 선택한것처럼 나오기 때문에 선택하지 않았는데도 삭제되는 것을 막기 위해서 사용                // 맵명을 추가하거나 삭제하면 레코드가 하나도 선택되지 않은것처럼 나온다                // 그래서 다시 폼로드 한 상태로 돌리려고 HideSelection속성을 HideSelection으로 바꾼다                GridEX_MapList.HideSelection = HideSelection.HideSelection;            }            // 프로젝트 수정            _Data.ProJect_Save_Complete = false;            // 대화 팝업은 특별처리(이벤트 해제)            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeleteMap);        }        //** GridEX_MapList를 클릭할 때 발생        private void GridEX_MapList_CurrentCellChanging(object sender, CurrentCellChangingEventArgs e)        {            // GridEX_MapList의 CurrentCellChanging의 이벤트를 처음 한번은 사용 못하게 함            if (FirstUnuseMap_CurrentCellChanging == true)            {                // 다음부터는 사용 가능                FirstUnuseMap_CurrentCellChanging = false;                if (e.Row == null) return;                // GridEX_MapList의 레코드를 선택했을 때, Map_ID를 저장                _Data.Map_No = e.Row.Cells["Map_No"].Value.ToString();                // GridEX_InDevice와 GridEX_OutDevice 셋팅                GridEX_InOutDevice_IN_Map_SET();            }            else            {                // 맨처음 로드 될때 GridEX_MapList에 행이 선택되어 있는 것을 방지하기 위해서 HideSelection 속성에 HideSelection을 줌                // 다음부터는 선택한 레코드의 포커스가 남겨짐                GridEX_MapList.HideSelection = HideSelection.Highlight;                if (e.Row == null) return;                // GridEX_MapList의 레코드를 선택했을 때, Map_ID를 저장                _Data.Map_No = e.Row.Cells["Map_No"].Value.ToString();                // GridEX_InDevice와 GridEX_OutDevice 셋팅                GridEX_InOutDevice_IN_Map_SET();            }            // 비상방송 텍스트 클리어            EditBox_Area.Text = null;            EditBox_Stair.Text = null;            EditBox_Floor.Text = null;        }        //** 추가와 삭제버튼을 연속으로 사용 할 경우 삭제를 할수 없어 아래의 이벤트를 사용한다.        private void GridEX_GroupList_CurrentCellChanged(object sender, EventArgs e)        {            GridEX_GroupList.HideSelection = HideSelection.Highlight;        }        //** 추가와 삭제버튼을 연속으로 사용 할 경우 삭제를 할수 없어 아래의 이벤트를 사용한다.        private void GridEX_MapList_CurrentCellChanged(object sender, EventArgs e)        {            GridEX_MapList.HideSelection = HideSelection.Highlight;        }        //** GridEX_OutDevice을 마우스로 클릭하였을 발생하는 이벤트        private void GridEX_OutDevice_MouseClick(object sender, MouseEventArgs e)        {            //** 헤더부분을 클릭하였을 경우는 사용하지 못함            if (e.Y > 40)            {                //** 마우스 오른쪽 버튼일 경우                if (e.Button == System.Windows.Forms.MouseButtons.Right)                {                    if (GridEX_OutDevice.CurrentRow == null)                    {                        return;                    }                    //** ID컬럼의 첫글자가 'G'일 경우                    if (GridEX_OutDevice.CurrentRow.Cells["ID"].Value.ToString().Remove(1) == "G")                    {                        ContextMenuStrip_OutDeviceInfo.Items.Clear();                        ContextMenuStrip_OutDeviceInfo.Items.Add(_Text.DeviceInfo); // 회로정보 확인                        ContextMenuStrip_OutDeviceInfo.Show(GridEX_OutDevice, e.Location);                    }                }            }        }        //** ContextMenuStrip의 항목을 클릭하였을 경우        private void ContextMenuStrip_OutDeviceInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)        {            // 컨텍스메뉴에서 회로정보 확인을 클릭하였을 경우            if (e.ClickedItem.Text == _Text.DeviceInfo) // 회로정보 확인            {                // 컨텍스트 항목을 클릭하여도 컨텍스 항목이 사라지지 않아서 클로우즈 시켜줌                ContextMenuStrip_OutDeviceInfo.Close();                // 폼 생성                _Data.MenuActivedForm = new Form_Check_Device(GridEX_OutDevice.CurrentRow.Cells["Receiver_ID"].Value.ToString());                _Form.Create(_Data.MenuActivedForm, null);                // Form_Check_Device폼으로 이벤트 발생                _Event.Form_ConfigMAP_SendMessage_Write(GridEX_OutDevice.CurrentRow.Cells["ID"].Value.ToString());            }        }        //** 비상방송코드 적용버튼        private void UiButton_Broadcastion_Apply_Click(object sender, EventArgs e)        {            if (EditBox_Area.Text.Length == 0)            {                // 비상방송코드 AREA를 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.AreaNotInput, 0);                return;            }            if (EditBox_Area.Text.Length != 2)            {                // 비상방송코드 AREA를 2자리로 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.AreaProblemInput, 0);                return;            }            if (EditBox_Stair.Text.Length == 0)            {                // 비상방송코드 STAIR를 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.StairNotInput, 0);                return;            }            if (EditBox_Stair.Text.Length != 2)            {                // 비상방송코드 STAIR를 2자리로 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.StairProblemInput, 0);                return;            }            if (EditBox_Floor.Text.Length == 0)            {                // 비상방송코드 FLOOR를 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FloorNotInput, 0);                return;            }            if (EditBox_Floor.Text.Length != 2)            {                // 비상방송코드 FLOOR를 2자리로 입력해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.FloorProblemInput, 0);                return;            }            // UPDATE로 해결하자            _Db.UPDATE("TB_EMERGENCY_BROADCASTION",                "RECEIVER_ID=" + Broadcation_Receiver +                ";COMM_ID=" + COMM_ID +                ";BOARD_ID=" + BOARD_ID +                ";LOOP_NO=" + LOOP_NO +                ";REPEATER_ID=" + REPEATER_ID +                ";DEVICE_ID=" + DEVICE_ID +                ";INOUT_TYPE=" + INOUT_TYPE,                "AREA_CODE=" + EditBox_Area.Text +                ";STAIR_CODE=" + EditBox_Stair.Text +                ";FLOOR_CODE=" + EditBox_Floor.Text);            // 저장하였습니다            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.SaveInform, 0);        }               //** 비상방송코드 삭제버튼        private void UiButton_Broadcastion_Delete_Click(object sender, EventArgs e)        {            //** GridEX_InDevice에서 선택한 행의 갯수를 알기 위해서            int SelectRowCount = GridEX_InDevice.SelectedItems.Count;            //** 선택한 행이 없으면 팝업을 띄운다            if (SelectRowCount == 0)            {                // 먼저 입력디바이스를 선택해 주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.InDeviceNotChoice, 0);                return;            }            if (EditBox_Area.Text.Length == 0 || EditBox_Stair.Text.Length == 0 || EditBox_Floor.Text.Length == 0)            {                // 삭제 할 수 없습니다                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.OK, 250, 150, _Text.NotDelete, 0);                return;            }            // 비상방송코드를 삭제하시겠습니까?            DialogPopup = _Popup.Create(Popup_Type.Dialog, Popup_Style.Normal, _Text.OK, 300, 150, _Text.BroadcastionInfo_Delete_Continue, 0);            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event += new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeletBroadcastion);        }        //** 팝업에서 Yes, NO 에서 받은 이벤트 처리(비상방송코드 삭제버튼 클릭시)        public void _Event_PopupClose_SendMessage_Event_DeletBroadcastion(object sender, object etc)        {            // 대화 팝업 주체            Form popup = (Form)sender;            if (DialogPopup.Name == popup.Name && etc.ToString() == _Text.OK)            {                // 입력디바이스 삭제                _Db.Execute(_Sql.Delete_Table(                    "TB_EMERGENCY_BROADCASTION", "RECEIVER_ID", Receiver_ID.ToString(), "COMM_ID", COMM_ID, "BOARD_ID", BOARD_ID,                    "LOOP_NO", LOOP_NO, "REPEATER_ID", REPEATER_ID, "DEVICE_ID", DEVICE_ID, "INOUT_TYPE", INOUT_TYPE, Broadcation_Receiver));                // 텍스트 클리어                EditBox_Area.Text = null;                EditBox_Stair.Text = null;                EditBox_Floor.Text = null;            }            // 대화 팝업은 특별처리            _Event.PopupClose_SendMessage_Event -= new _Event.PopupClose_SendMessage_Handler(_Event_PopupClose_SendMessage_Event_DeletBroadcastion);        }        private void GridEX_InDevice_CurrentCellChanging(object sender, CurrentCellChangingEventArgs e)        {            // 선택한 행이 없으면            if (e.Row == null) return;            Broadcation_Receiver = e.Row.Cells["Receiver_ID"].Value.ToString();            string InDevice = e.Row.Cells["ID"].Value.ToString();            // COMM_ID, BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID, INOUT_TYPE            MskDeviceIDString device_id = new MskDeviceIDString(InDevice, Broadcation_Receiver); // cyim 2016.12.05 : 수신기 모델별 내부 로직 변경            COMM_ID = device_id.Comm_id;            BOARD_ID = device_id.Board_id;            LOOP_NO = device_id.Loop_no;            REPEATER_ID = device_id.Repeater_id;            DEVICE_ID = device_id.Device_id;            INOUT_TYPE = device_id.Inout_type;            //            // 비상방송 출력            //            // 먼저 클릭할때 저장과 삭제 버튼을 활성화 시킨다.            UiButton_Broadcastion_Apply.Enabled = true;            UiButton_Broadcastion_Delete.Enabled = true;            // 먼저 텍스트 클리어            EditBox_Area.Text = null;            EditBox_Stair.Text = null;            EditBox_Floor.Text = null;            // 조회            //** TB_MAP 테이블에서 맵명을 모두 가지고 온다            DataRowCollection DB_TABLE_BROADCASTION = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_TB_EMERGENCY_BROADCASTION(                "TB_EMERGENCY_BROADCASTION", "COMM_ID", COMM_ID, "BOARD_ID", BOARD_ID,                "LOOP_NO", LOOP_NO, "REPEATER_ID", REPEATER_ID, "DEVICE_ID", DEVICE_ID, "INOUT_TYPE", INOUT_TYPE, Broadcation_Receiver));            if (DB_TABLE_BROADCASTION != null)            {                foreach (DataRow dr in DB_TABLE_BROADCASTION)                {                    EditBox_Area.Text = dr[7].ToString();                    EditBox_Stair.Text = dr[8].ToString();                    EditBox_Floor.Text = dr[9].ToString();                }            }            // 조회해 왔는데 값이 없으면 저장과 삭제버튼 비활성화 시킨다            if (EditBox_Area.Text.Length == 0 || EditBox_Stair.Text.Length == 0 || EditBox_Floor.Text.Length == 0)            {                UiButton_Broadcastion_Apply.Enabled = false;                UiButton_Broadcastion_Delete.Enabled = false;            }        }                 }}
 |