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; } } } }