{"TYPE":"Single","MTX_MODULE_INFO":[{"MODULE_CODE":"MOD17B024340C76184B02FDF74E248B10F6","MODULE_SUBJECT":"[MX-Grid] 시트별 이동 버튼 컨트롤 생성","USE_AUTHORITY":"0","EDIT_AUTHORITY":"-1","MODULE_DESCRIPTION":"여러 개의 시트(Sheet)를 가진 MX-Grid를 사용할 때,\n각각의 시트로 이동할 수 있는 버튼을 화면에 자동으로 생성합니다. ","SCRIPT_TEXT":"/**\n * ============================================================\n * [MX-Grid] 시트별 이동 버튼 컨트롤 생성 (스타일 지정)\n * ============================================================\n * 설명    : MX-Grid에 바인딩된 시트(Sheet) 개수와 이름에 맞춰\n * 화면에 버튼을 자동으로 생성하고, 클릭 시 해당 시트로 이동합니다.\n * 버튼에 적용할 디자인(박스 스타일)도 일괄 지정할 수 있습니다.\n *\n * Arguments:\n * [0] {string} gridId    - 대상 MX-Grid 컨트롤 ID\n * [1] {number} startLeft - 첫 번째 버튼이 생성될 X 좌표(LEFT 위치) (기본값: 20)\n * [2] {number} startTop  - 버튼들이 생성될 Y 좌표(TOP 위치) (기본값: 20)\n * [3] {number} btnGap    - 버튼 간의 가로 간격(너비 포함) (기본값: 70)\n * [4] {string} boxStyle  - 생성될 버튼들에 적용할 박스 스타일 이름 (선택 사항)\n * ============================================================\n */\n\nvar gridId    = arguments[0];\nvar startLeft = Number(arguments[1]) || 20;\nvar startTop  = Number(arguments[2]) || 20;\nvar btnGap    = Number(arguments[3]) || 70;\nvar boxStyle  = arguments[4];\n\n// 사용자가 박스 스타일을 입력하지 않았을 경우 적용할 기본 스타일 지정\nif (!boxStyle) {\n    boxStyle = \"Button Default\";\n} else {\n    boxStyle = boxStyle.trim();\n}\n\nvar mxGrid = Matrix.getObject(gridId);\n\n// 그리드가 없으면 중단\nif (!mxGrid) { return; }\n\n// 그리드 데이터 로드가 완료되면 버튼 생성 로직 실행\nmxGrid.OnDataBindEnd = function(sender, args) {\n    var left = startLeft;\n    var sheetNames = mxGrid.getWorkSheetNames();\n\n    for (var i = 0; i < sheetNames.length; i++) {\n        var sheetName = sheetNames[i];\n        \n        // 버튼 ID 중복 생성을 막기 위해 고유 ID 생성\n        var btnId = \"BTN_\" + gridId + \"_\" + sheetName;\n        var btn = Matrix.getObject(btnId);\n\n        // 버튼이 화면에 없을 때만 새로 생성\n        if (!btn) {\n            Matrix.CreateObject(4, btnId); // 4 = Button Control\n            btn = Matrix.getObject(btnId);\n            \n            btn.Text = sheetName;\n            btn.Left = left;\n            btn.Top  = startTop;\n            \n            // 지정된(또는 기본값으로 설정된) 박스 스타일 적용\n            btn.Style.SetBoxStyleName(boxStyle);\n            \n            // ★ 속성 및 스타일 변경 사항을 화면에 최종 반영\n            btn.Update();\n            \n            // 클릭 이벤트 연결\n            btn.OnClick = (function(targetSheet) {\n                return function(s, e) {\n                    mxGrid.ChangeSheet(targetSheet);\n                };\n            })(sheetName);\n        }\n        \n        // 다음 버튼을 위해 X 좌표 이동\n        left = left + btnGap;\n    }\n};\n\nMatrix.doRefresh(gridId);","MODULE_TYPE":"","RESULT_TYPE":"","ORIGINAL_MODULE_CODE":"","CREATE_USER":"swchoi1436","MODIFY_USER":"swchoi1436","MODULE_SEQ":"3","WF_YN":"","EVENT_YN":"Y","ATTR1":"","ATTR2":"","ATTR3":"", "MTX_MODULE_PARAMS":[{"MODULE_CODE":"MOD17B024340C76184B02FDF74E248B10F6","PARAM_SEQ":"1","PARAM_TYPE":"INP004","NULLABLE":"N","PARAM_DESCRIPTION":"버튼을 생성할 MX-Grid 컨트롤 선택","DEFAULT_VALUE":"","ATTR1":"","ATTR2":"","ATTR3":""},{"MODULE_CODE":"MOD17B024340C76184B02FDF74E248B10F6","PARAM_SEQ":"2","PARAM_TYPE":"INP002","NULLABLE":"Y","PARAM_DESCRIPTION":"첫 번째 버튼이 위치할 LEFT 위치를 숫자로 입력 (기본값: 20)","DEFAULT_VALUE":"20","ATTR1":"","ATTR2":"","ATTR3":""},{"MODULE_CODE":"MOD17B024340C76184B02FDF74E248B10F6","PARAM_SEQ":"3","PARAM_TYPE":"INP002","NULLABLE":"Y","PARAM_DESCRIPTION":"버튼들이 위치할 TOP 위치를 숫자로 입력 (기본값: 20)","DEFAULT_VALUE":"20","ATTR1":"","ATTR2":"","ATTR3":""},{"MODULE_CODE":"MOD17B024340C76184B02FDF74E248B10F6","PARAM_SEQ":"4","PARAM_TYPE":"INP002","NULLABLE":"Y","PARAM_DESCRIPTION":"생성되는 버튼 사이의 간격을 숫자로 입력 (기본값: 70)","DEFAULT_VALUE":"70","ATTR1":"","ATTR2":"","ATTR3":""},{"MODULE_CODE":"MOD17B024340C76184B02FDF74E248B10F6","PARAM_SEQ":"5","PARAM_TYPE":"INP009","NULLABLE":"Y","PARAM_DESCRIPTION":"적용할 박스 스타일명 선택","DEFAULT_VALUE":"","ATTR1":"","ATTR2":"","ATTR3":""}]}]}