ibsheetinfo.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917
  1. var gJson = {Data: [[]]};
  2. /*
  3. * IBSheet를 생성(호출 위치에서 동적 생성)
  4. */
  5. function createIBSheet(sheetid, width, height, locale) {
  6. var div_str = "";
  7. if (!locale) locale = "";
  8. Grids.Locale = locale;
  9. div_str += "<div id='DIV_" + sheetid + "' style='width:" + width + ";height:" + height + ";'>";
  10. div_str += "<script> IBSheet('<ibsheet Sync=\"1\" Data_Sync=\"0\"> </ibsheet>',\"DIV_" + sheetid + "\", \"" + sheetid + "\"); </script>";
  11. div_str += "</div>\n";
  12. //<![CDATA[
  13. document.write(div_str);
  14. //]]>
  15. }
  16. /*
  17. * IBSheet를 생성 (특정 div 하위로 넣는 경우에 사용)
  18. */
  19. function createIBSheet2(obj, sheetid, width, height, locale) {
  20. // locale 처리
  21. Grids.Locale = locale ? locale : "";
  22. if (typeof obj === "string") {
  23. obj = document.getElementById(obj);
  24. }
  25. if (obj && typeof obj === "object") {
  26. // width, height 적용
  27. obj.style.width = width;
  28. obj.style.height = height;
  29. IBSheet('<ibsheet Sync=\"1\" Data_Sync=\"0\"> </ibsheet>', obj.id, sheetid);
  30. } else {
  31. throw "[createIBSheet2] IBSheet container is null.";
  32. }
  33. }
  34. /* MergeSheet 속성에 설정 값 */
  35. var msNone = 0, // 머지 없음
  36. msAll = 1, // 전부 머지 가능
  37. msPrevColumnMerge = 2, // 앞 컬럼이 머지 된 경우 해당 행 안에서 머지 가능
  38. msFixedMerge = 3, // 단위데이터행 구조에서의 고정 셀 병합 기능
  39. msBaseColumnMerge = 4, // 기준 컬럼 머지 영역 범위 내에서의 머지 기능
  40. msHeaderOnly = 5; // 해더만 머지
  41. /* BasicImeMode 속성 설정 값 */
  42. var imeAuto = 0; // 마지막 상태를 그대로 사용
  43. var imeHan = 1; // 기본 상태를 한글 입력 상태로 함
  44. var imeEng = 2; // 기본 상태를 영문 입력 상태로 함
  45. /* SizeMode 속성 설정 값 */
  46. var sizeAuto = 0; // 설정한 높이, 너비 그대로 사용
  47. var sizeNoVScroll = 1; // 높이를 스크롤 없이 자동 설정
  48. var sizeNoHScroll = 2; // 너비를 스크롤 없이 자동 설정
  49. var sizeNoBothScroll = 3; // 높이, 너비 모두 스크롤 없이 자동 설정
  50. var sizeAdvancedAuto = 4; //설정한 높이 이전까지 스크롤 없이 높이 자동 설정
  51. /* SearchMode 속성 설정 값 */
  52. var smGeneral = 0, // 일반 조회
  53. smClientPaging = 1, // 클라이언트 페이징 조회
  54. smLazyLoad = 2, // Lazy Load 조회
  55. smServerPaging = 3, // 실시간 서버 페이징 조회 (Scroll 방식)
  56. smServerPaging2 = 4; // 실시간 서버 페이징 조회 (Page Index 방식)
  57. /* SumPosition 속성 설정 값 */
  58. var posTop = 0; // 상단 고정 위치
  59. var posBottom = 1; // 하단 고정 위치
  60. /* VScrollMode 속성 설정 값 */
  61. var vsAuto = 0; // 자동 생성
  62. var vsFixed = 1; // 고정 생성
  63. /*
  64. FormQueryString 관련 함수 정의
  65. */
  66. /* FormQueryString과 FormQueryStringEnc함수에서 필수입력 체크시 메시지로 사용한다.-3.4.0.50 */
  67. var IBS_MSG_REQUIRED = "은(는) 필수입력 항목입니다.";
  68. /**
  69. * 에러메시지를 표시한다. IBS_ShowErrMsg 대신 이 함수를 사용해야 한다.
  70. * @param : sMsg - 메시지
  71. * @return : 없음
  72. * @version : 3.4.0.50
  73. * @sample
  74. * IBS_ShowErrMsg("에러가 발생했습니다.");
  75. */
  76. function IBS_ShowErrMsg(sMsg) {
  77. return alert("[IBSheetInfo.js]\n" + sMsg);
  78. }
  79. function IBS_getName(obj) {
  80. if (obj.name != "") {
  81. return obj.name;
  82. } else if (obj.id != "") {
  83. return obj.id;
  84. } else {
  85. return "";
  86. }
  87. }
  88. function IBS_RequiredChk(obj) {
  89. return (obj.getAttribute("required") != null);
  90. }
  91. /**
  92. * Form오브젝트 안에 있는 컨트롤을 QueryString으로 구성한다. 이때, 한글은 인코딩하지 않는다.
  93. * @param : form - 필수,html의 Form 오브젝트 Name
  94. * @param : checkRequired - 선택,필수입력 체크 여부(true,false)
  95. * @return : String - Form오브젝트 안에 Control을 QueryString으로 구성한 문자열
  96. * undefined - checkRequired인자가 true이고, 필수입력에 걸린경우 return 값
  97. * @version : 1.0.0.0,
  98. * 3.4.0.50(checkRequired 인자 추가)
  99. * @sample1
  100. * var sCondParam=FormQueryString(document.frmSearch); //결과:"txtname=이경희&rdoYn=1&sltMoney=원화";
  101. * @sample2
  102. * <input type="text" name="txtName" required="이름"> //필수 입력 항목이면 required="이름" 를 설정한다.
  103. * var sCondParam = FormQueryString(document.mainForm, true);//필수입력까지 체크하며, 필수입력에 걸리면 리턴값은 null
  104. * if (sCondParam==null) return;
  105. */
  106. function FormQueryString(form, checkRequired) {
  107. if (typeof form != "object" || form.tagName != "FORM") {
  108. IBS_ShowErrMsg("FormQueryString 함수의 인자는 FORM 태그가 아닙니다.");
  109. return "";
  110. }
  111. if (checkRequired == null) checkRequired = false;
  112. var name = new Array(form.elements.length);
  113. var value = new Array(form.elements.length);
  114. var j = 0;
  115. var plain_text = "";
  116. //사용가능한 컨트롤을 배열로 생성한다.
  117. len = form.elements.length;
  118. for (i = 0; i < len; i++) {
  119. var prev_j = j;
  120. switch (form.elements[i].type) {
  121. case undefined:
  122. case "button":
  123. case "reset":
  124. case "submit":
  125. break;
  126. case "radio":
  127. case "checkbox":
  128. if (form.elements[i].checked == true) {
  129. name[j] = IBS_getName(form.elements[i]);
  130. value[j] = form.elements[i].value;
  131. j++;
  132. }
  133. break;
  134. case "select-one":
  135. name[j] = IBS_getName(form.elements[i]);
  136. var ind = form.elements[i].selectedIndex;
  137. if (ind >= 0) {
  138. value[j] = form.elements[i].options[ind].value;
  139. } else {
  140. value[j] = "";
  141. }
  142. j++;
  143. break;
  144. case "select-multiple":
  145. name[j] = IBS_getName(form.elements[i]);
  146. var llen = form.elements[i].length;
  147. var increased = 0;
  148. for (k = 0; k < llen; k++) {
  149. if (form.elements[i].options[k].selected) {
  150. name[j] = IBS_getName(form.elements[i]);
  151. value[j] = form.elements[i].options[k].value;
  152. j++;
  153. increased++;
  154. }
  155. }
  156. if (increased > 0) {
  157. j--;
  158. } else {
  159. value[j] = "";
  160. }
  161. j++;
  162. break;
  163. default:
  164. name[j] = IBS_getName(form.elements[i]);
  165. value[j] = form.elements[i].value;
  166. j++;
  167. }
  168. if (checkRequired) {
  169. //html 컨트롤 태그에 required속성을 설정하면 필수입력을 확인할 수 있다.
  170. //<input type="text" name="txtName" required="이름">
  171. if (IBS_RequiredChk(form.elements[i]) && prev_j != j && value[prev_j] == "") {
  172. if (form.elements[i].getAttribute("required") == null ||
  173. form.elements[i].getAttribute("required") == ""
  174. ) {
  175. alert('"' + IBS_getName(form.elements[i]) + '"' + IBS_MSG_REQUIRED);
  176. } else {
  177. alert('"' + form.elements[i].getAttribute("required") + '"' + IBS_MSG_REQUIRED);
  178. }
  179. //컨트롤이 숨겨져 있을수도 있으므로 에러 감싼다.
  180. try {
  181. form.elements[i].focus();
  182. } catch (ee) {;
  183. }
  184. return;
  185. }
  186. }
  187. }
  188. //QueryString을 조합한다.
  189. for (i = 0; i < j; i++) {
  190. if (name[i] != '') plain_text += name[i] + "=" + value[i] + "&";
  191. }
  192. //마지막에 &를 없애기 위함
  193. if (plain_text != "") plain_text = plain_text.substr(0, plain_text.length - 1);
  194. return plain_text;
  195. }
  196. /**
  197. * Form오브젝트 안에 있는 컨트롤을 QueryString으로 구성한다. 이때, 한글은 인코딩한다.
  198. * @param : form - 필수,html의 Form 오브젝트 Name
  199. * @param : Sheet - 필수,IBheet의 Object id
  200. * @param : checkRequired - 선택,필수입력 체크 여부(true,false)
  201. * @return : String - Form오브젝트 안에 Control을 QueryString으로 구성한 문자열
  202. * undefined - checkRequired인자가 true이고, 필수입력에 걸린경우 return 값
  203. * @version : 1.0.0.0,
  204. * 3.4.0.50(checkRequired 인자 추가)
  205. * @sample1
  206. * var sCondParam=FormQueryStringEnc(document.frmSearch, mySheet1);
  207. * 원본:"txtname=이경희&rdoYn=1&sltMoney=원화";
  208. * 결과:"txtname=%C0%CC%B0%E6%C8%F1&rdoYn=1&sltMoney=%BF%F8%C8%AD"; //UTF16인 경우
  209. * 결과:"txtname=%EC%9D%B4%EA%B2%BD%ED%9D%AC&rdoYn=1&sltMoney=%EC%9B%90%ED%99%94"; //UTF8인 경우
  210. * @sample2
  211. * <input type="text" name="txtName" required="이름"> //필수 입력 항목이면 required="이름" 를 설정한다.
  212. * var sCondParam = FormQueryStringEnc(document.mainForm, mySheet, true);//필수입력까지 체크하며, 필수입력에 걸리면 리턴값은 null
  213. * if (sCondParam==null) return;
  214. */
  215. function FormQueryStringEnc(form, checkRequired) {
  216. if (typeof form != "object" || form.tagName != "FORM") {
  217. IBS_ShowErrMsg("FormQueryStringEnc 함수의 form 인자는 FORM 태그가 아닙니다.");
  218. return "";
  219. }
  220. if (checkRequired == null) checkRequired = false;
  221. var name = new Array(form.elements.length);
  222. var value = new Array(form.elements.length);
  223. var j = 0;
  224. var plain_text = "";
  225. //사용가능한 컨트롤을 배열로 생성한다.
  226. len = form.elements.length;
  227. for (i = 0; i < len; i++) {
  228. var prev_j = j;
  229. switch (form.elements[i].type) {
  230. case "button":
  231. case "reset":
  232. case "submit":
  233. break;
  234. case "radio":
  235. case "checkbox":
  236. if (form.elements[i].checked == true) {
  237. name[j] = IBS_getName(form.elements[i]);
  238. value[j] = form.elements[i].value;
  239. j++;
  240. }
  241. break;
  242. case "select-one":
  243. name[j] = IBS_getName(form.elements[i]);
  244. var ind = form.elements[i].selectedIndex;
  245. if (ind >= 0) {
  246. value[j] = form.elements[i].options[ind].value;
  247. } else {
  248. value[j] = "";
  249. }
  250. j++;
  251. break;
  252. case "select-multiple":
  253. name[j] = IBS_getName(form.elements[i]);
  254. var llen = form.elements[i].length;
  255. var increased = 0;
  256. for (k = 0; k < llen; k++) {
  257. if (form.elements[i].options[k].selected) {
  258. name[j] = IBS_getName(form.elements[i]);
  259. value[j] = form.elements[i].options[k].value;
  260. j++;
  261. increased++;
  262. }
  263. }
  264. if (increased > 0) {
  265. j--;
  266. } else {
  267. value[j] = "";
  268. }
  269. j++;
  270. break;
  271. default:
  272. name[j] = IBS_getName(form.elements[i]);
  273. value[j] = form.elements[i].value;
  274. j++;
  275. }
  276. if (checkRequired) {
  277. //html 컨트롤 태그에 required속성을 설정하면 필수입력을 확인할 수 있다.
  278. //<input type="text" name="txtName" required="이름">
  279. if (IBS_RequiredChk(form.elements[i]) && prev_j != j && value[prev_j] == "") {
  280. if (form.elements[i].getAttribute("required") == "") {
  281. alert('"' + IBS_getName(form.elements[i]) + '"' + IBS_MSG_REQUIRED);
  282. } else {
  283. alert('"' + form.elements[i].getAttribute("required") + '"' + IBS_MSG_REQUIRED);
  284. }
  285. //컨트롤이 숨겨져 있을수도 있으므로 에러 감싼다.
  286. try {
  287. form.elements[i].focus();
  288. } catch (ee) {;
  289. }
  290. return;
  291. }
  292. }
  293. }
  294. //QueryString을 조합한다.
  295. for (i = 0; i < j; i++) {
  296. if (name[i] != '') plain_text += encodeURIComponent(name[i]) + "=" + encodeURIComponent(value[i]) + "&";
  297. }
  298. //마지막에 &를 없애기 위함
  299. if (plain_text != "") plain_text = plain_text.substr(0, plain_text.length - 1);
  300. return plain_text;
  301. }
  302. /*------------------------------------------------------------------------------
  303. * titile : IBSheet의 조회,저장시 사용되는 함수
  304. * paramList :
  305. * param1 : s_SAVENAME 객체를 담고 있는 form 객체
  306. * param2 : 조회해야 할 시트 객체
  307. * param3.. : 여러개 시트를 한번에 조회하는 경우 시트의 개수만큼 붙인다.
  308. -------------------------------------------------------------------------------*/
  309. function IBS_SaveName() {
  310. var param = arguments;
  311. if (param.length < 2) {
  312. IBS_ShowErrMsg("최하 두개의 인자가 필요합니다.");
  313. return;
  314. }
  315. if (param.length == 2) {
  316. param[0].s_SAVENAME.value = IBS_ConcatSaveName(param[1]);
  317. } else {
  318. param[0].s_SAVENAME.value = "";
  319. for (var i = 1; i < param.length; i++) {
  320. param[0].s_SAVENAME.value += IBS_ConcatSaveName(param[i]) + "@@";
  321. }
  322. var tempStr = param[0].s_SAVENAME.value;
  323. param[0].s_SAVENAME.value = tempStr.substring(0, tempStr.length - 2);
  324. }
  325. }
  326. function IBS_ConcatSaveName(sheet) {
  327. var lr = sheet.GetDataRows(),
  328. lc = sheet.LastCol(),
  329. res = [],
  330. r = 0,
  331. c = 0,
  332. cn = "",
  333. sn = "";
  334. for (r = 0; r < lr; r++) {
  335. for (c = 0; c <= lc; c++) {
  336. cn = sheet.GetColName(c);
  337. sn = sheet.ColSaveName(r, c);
  338. if (cn !== sn) {
  339. res.push(sn);
  340. }
  341. }
  342. }
  343. return res.join("|");
  344. }
  345. /*------------------------------------------------------------------------------
  346. * method : GetSaveJson
  347. * desc : 지정한 상태에 대한 데이터를 json 형태로 반환한다.
  348. * param list
  349. * param1 : IBSheet Object
  350. * param2 : 상태 (I|U|D)
  351. * param3 : SkipCol list
  352. -------------------------------------------------------------------------------*/
  353. function GetSaveJson2(sheet, status, skipcols) {
  354. if (sheet == null) {
  355. alert("GetSaveJson2 함수의 첫번째 인자는 ibsheet 객체여야 합니다.");
  356. return;
  357. }
  358. var skipcolsArr = null;
  359. if (skipcols != null) {
  360. skipcolsArr = skipcols.split("|");
  361. }
  362. var rtnJson = {};
  363. if (status == null) {
  364. var temp = GetJsonStatus(sheet, "I", skipcolsArr);
  365. if (temp) rtnJson["INSERT"] = temp;
  366. temp = GetJsonStatus(sheet, "D", skipcolsArr);
  367. if (temp) rtnJson["DELETE"] = temp;
  368. temp = GetJsonStatus(sheet, "U", skipcolsArr);
  369. if (temp) rtnJson["UPDATE"] = temp;
  370. } else {
  371. switch (status) {
  372. case "I":
  373. rtnJson["INSERT"] = GetJsonStatus(sheet, "I", skipcolsArr);
  374. break;
  375. case "U":
  376. rtnJson["UPDATE"] = GetJsonStatus(sheet, "U", skipcolsArr);
  377. break;
  378. case "D":
  379. rtnJson["DELETE"] = GetJsonStatus(sheet, "D", skipcolsArr);
  380. break;
  381. }
  382. GetJsonStatus(sheet, status);
  383. }
  384. return rtnJson;
  385. }
  386. function GetJsonStatus(sheet, status, skipcolsArr) {
  387. var rtnJson = new Array();
  388. //지정한 상태 값을 갖는 행을 뽑는다.
  389. var rows = sheet.FindStatusRow(status);
  390. if (rows == "") return null;
  391. var rowArr = rows.split(";");
  392. for (var i = 0; i < rowArr.length; i++) {
  393. var temp = sheet.GetRowJson(rowArr[i]);
  394. if (skipcolsArr != null) {
  395. for (var c = 0; c < skipcolsArr.length; c++) {
  396. delete temp[skipcolsArr[c]];
  397. }
  398. }
  399. rtnJson.push(temp);
  400. }
  401. return rtnJson;
  402. }
  403. /**
  404. IBSheet 초기화 작업을 일괄 처리 한다.
  405. @method IBS_InitSheet
  406. @public
  407. @param {object} sheet 대상 시트 객체
  408. @param {object} info 초기화 정보
  409. @param {object} info.Cols 컬럼 초기화 정보 객체
  410. @param {object} [info.Cfg] 시트 초기화 정보 객체
  411. @param {object} [info.Headers] 헤더 초기화 정보 객체
  412. @param {object} [info.HeaderMode] 헤더 모드 정보 객체
  413. */
  414. function IBS_InitSheet(sheet, info) {
  415. var cInfo = {},
  416. colsHeader = [],
  417. headerUnitPos = [],
  418. useColsHeader = 0,
  419. max = 0,
  420. cnt = 0,
  421. htmlHeader = [],
  422. dataRows = 1;
  423. function appendHeaderText(last, col, header, unitPos) {
  424. var unitHeader = header,
  425. i = 0,
  426. len = 0;
  427. if (!_ibsUtil.isArray(header)) {
  428. unitHeader = header.split("|");
  429. }
  430. useColsHeader = 1;
  431. len = unitHeader.length;
  432. if (cnt < len) {
  433. cnt = len;
  434. }
  435. if (typeof unitPos == "undefined") {
  436. unitPos = 0;
  437. }
  438. for (i = 0; i < len; i++) {
  439. if (typeof colsHeader[last + i] === "undefined") {
  440. colsHeader[last + i] = [];
  441. }
  442. if (typeof headerUnitPos[last + i] === "undefined") {
  443. headerUnitPos[last + i] = unitPos;
  444. }
  445. colsHeader[last + i][col] = unitHeader[i];
  446. }
  447. };
  448. // 필수 입력 요소 체크
  449. if (!sheet || !info || !info.Cols) {
  450. alert("시트 초기화 정보가 올바르지 않습니다.");
  451. return;
  452. }
  453. cInfo = CloneArray(info);
  454. // DataRows 설정
  455. if (cInfo.Cols[0] && typeof cInfo.Cols[0].length !== "undefined") {
  456. dataRows = cInfo.Cols.length;
  457. }
  458. // Cfg 기본값 설정
  459. if (!cInfo.Cfg) {
  460. cInfo.Cfg = {};
  461. }
  462. // Headers 기본값 설정
  463. if (!cInfo.Headers) {
  464. cInfo.Headers = [{
  465. Text: "",
  466. Align: "Center"
  467. }];
  468. }
  469. // HeaderMode 기본값 설정 및 Align 처리
  470. if (!cInfo.HeaderMode) {
  471. cInfo.HeaderMode = {};
  472. } else {
  473. if (cInfo.HeaderMode.Align) {
  474. var header = cInfo.Headers;
  475. for (var i = 0, len = header.length; i < len; i++) {
  476. header[i].Align = cInfo.HeaderMode.Align;
  477. }
  478. }
  479. }
  480. for (var i = 0, len = cInfo.Cols.length; i < len; i++) {
  481. var col = cInfo.Cols[i];
  482. if (typeof col.Header === "undefined") {
  483. for (var j = 0, len2 = col.length; j < len2; j++) {
  484. var col2 = col[j];
  485. if (typeof col2.Header !== "undefined") {
  486. appendHeaderText(max, j, col2.Header, i);
  487. delete col2.Header;
  488. }
  489. }
  490. max += cnt;
  491. cnt = 0;
  492. } else {
  493. appendHeaderText(0, i, col.Header, 0);
  494. delete col.Header;
  495. }
  496. if (col.HeaderHtml) {
  497. var ht = col.HeaderHtml;
  498. if (!_ibsUtil.isArray(ht)) {
  499. ht = [ht];
  500. }
  501. var hh = {
  502. Col: i,
  503. Html: ht
  504. };
  505. htmlHeader.push(hh);
  506. }
  507. }
  508. if (useColsHeader) {
  509. cInfo.Headers = [];
  510. for (var i = 0, len = colsHeader.length; i < len; i++) {
  511. var header = {};
  512. if (typeof colsHeader[i] === "undefined") {
  513. header.Text = "";
  514. } else {
  515. header.Text = colsHeader[i].join("|");
  516. }
  517. header.Align = cInfo.HeaderMode.Align || "Center";
  518. cInfo.Headers.push(header);
  519. }
  520. }
  521. sheet.SetUnicodeByte(3);
  522. sheet.SetCountPosition(4);
  523. sheet.SetConfig(cInfo.Cfg);
  524. sheet.InitHeaders(cInfo.Headers, cInfo.HeaderMode);
  525. sheet.InitColumns(cInfo.Cols, dataRows);
  526. sheet.SetTheme('LGY2', 'LightGray2');
  527. if (typeof sheet.InitHeadersUnitPos !="undefined") {
  528. sheet.InitHeadersUnitPos(headerUnitPos);
  529. }
  530. //HeaderHtml
  531. for (var i = 0, len = htmlHeader.length; i < len; i++) {
  532. var ht = htmlHeader[i];
  533. for (var j = 0, len2 = ht.Html.length; j < len2; j++) {
  534. if (ht.Html[j] && ht.Html[j] !== "") {
  535. sheet.SetHtmlHeaderValue(j, ht.Col, ht.Html[j]);
  536. }
  537. }
  538. }
  539. }
  540. /*------------------------------------------------------------------------------
  541. * method : IBS_CopyJson2Form
  542. * desc : json 데이터를 이름을 기준으로 폼객체에 넣는다.
  543. * param list
  544. * param1 : json 객체
  545. * param2 : 대상 폼 name
  546. json 자료 구조 :
  547. {"폼객체명":{"객체명":"값","객체명2":"값2"}}
  548. ex){"aFrm":{"sa_no":"12345","sa_name":"손이창","grade":"a3","married":"NO","enter_date":"2012-12-31"}}
  549. -------------------------------------------------------------------------------*/
  550. function IBS_CopyJson2Form(jsonobj, frmName) {
  551. var json,
  552. obj,
  553. stype,
  554. idx,
  555. max;
  556. if (typeof frmName == "object") {
  557. frmName = frmName.name;
  558. }
  559. json = jsonobj[frmName];
  560. for (j in json) {
  561. obj = null;
  562. try {
  563. obj = document[frmName][j];
  564. if (obj == null || typeof obj == "undefined") {
  565. obj = document.getElementById(j);
  566. }
  567. if (obj == null || typeof obj == "undefined") {
  568. continue;
  569. }
  570. } catch (e) {
  571. //alert(e.message);
  572. }
  573. stype = (obj.type);
  574. if (typeof stype == "undefined" && obj.length > 0) {
  575. stype = obj[0].type;
  576. }
  577. switch (stype) {
  578. case undefined:
  579. case "button":
  580. case "reset":
  581. case "submit":
  582. break;
  583. case "select-one":
  584. obj.value = json[j];
  585. break;
  586. case "radio":
  587. obj.checked = json[j];
  588. break;
  589. case "checkbox":
  590. obj.checked = json[j];
  591. break;
  592. default:
  593. obj.value = json[j];
  594. break;
  595. } //end of switch
  596. }
  597. }
  598. /*------------------------------------------------------------------------------
  599. method : IBS_CopyForm2Sheet()
  600. desc : Form객체에 있는 내용을 시트에 복사
  601. param list
  602. param : json 유형
  603. param 내부 설정값
  604. sheet : 값을 입력 받을 ibsheet 객체 (필수)
  605. form : copy할 폼객체 (필수)
  606. row : ibsheet 객체의 행 (default : 현재 선택된 행)
  607. sheetPreFiex : 맵핑할 시트의 SavaName 앞에 PreFix 문자 (default : "")
  608. formPreFiex : 맵핑할 폼객체의 이름 혹은 id 앞에 PreFix 문자 (default : "")
  609. useOnChange : 시트값 변경시 OnChange 이벤트 사용 유무 (default : false)
  610. -------------------------------------------------------------------------------*/
  611. function IBS_CopyForm2Sheet(param) {
  612. var sheetobj,
  613. formobj,
  614. row,
  615. sheetPreFix,
  616. frmPreFix,
  617. uoc,
  618. col,
  619. max,
  620. colSaveName,
  621. baseSaveName,
  622. frmchild,
  623. sType,
  624. sValue;
  625. if ((!param.sheet) || (!param.sheet.IBSheetVersion)) {
  626. IBS_ShowErrMsg("IBS_CopyForm2Sheet 함수의 sheet 인자가 없거나 ibsheet객체가 아닙니다.");
  627. return false;
  628. }
  629. if (param.form == null || typeof param.form != "object" || param.form.tagName != "FORM") {
  630. IBS_ShowErrMsg("IBS_CopyForm2Sheet 함수의 form 인자가 없거나 FORM 객체가 아닙니다.");
  631. return false;
  632. }
  633. sheetobj = param.sheet;
  634. formobj = param.form;
  635. row = param.row == null ? sheetobj.GetSelectRow() : param.row;
  636. sheetPreFix = param.sheetPreFix == null ? "" : param.sheetPreFix;
  637. frmPreFix = param.formPreFix == null ? "" : param.formPreFix;
  638. uoc = param.useOnChange == null ? 0 : param.useOnChange;
  639. if (row < 0) {
  640. alert("선택된 행이 존재하지 않습니다.");
  641. return;
  642. }
  643. //Sheet의 컬럼개수만큼 찾아서 HTML의 Form 각 Control에 값을 설정한다.
  644. //컬럼개수만큼 루프 실행
  645. for (col = 0, max = sheetobj.LastCol(); col <= max; col++) {
  646. //컬럼의 별명을 문자열로 가져온다.
  647. colSaveName = sheetobj.ColSaveName(col);
  648. if (colSaveName == "") {
  649. continue;
  650. }
  651. //PreFix가 붙지 않은 형태의 SaveName을 가져온다.
  652. baseSaveName = colSaveName.substring(sheetPreFix.length);
  653. frmchild = null;
  654. try {
  655. //폼에 있는 해당 이름의 컨트롤을 가져온다.예)"frm_CardNo"
  656. frmchild = formobj[frmPreFix + baseSaveName];
  657. } catch (e) {
  658. alert(e);
  659. }
  660. //폼에 해당하는 이름의 컨트롤이 없는 경우는 계속 진행한다.
  661. if (frmchild == null) continue;
  662. sType = frmchild.type;
  663. sValue = "";
  664. //radio의 경우 frmchild가 배열형태가 되므로, frmchild.type으로는 타입을 알수 없다.
  665. if (typeof sType == "undefined" && frmchild.length > 0) {
  666. sType = frmchild[0].type;
  667. }
  668. //타입별로 값을 설정한다.
  669. switch (sType) {
  670. case undefined:
  671. case "button":
  672. case "reset":
  673. case "submit":
  674. break;
  675. case "radio":
  676. for (idx = 0; idx < frmchild.length; idx++) {
  677. if (frmchild[idx].checked) {
  678. sValue = frmchild[idx].value;
  679. break;
  680. }
  681. }
  682. break;
  683. case "checkbox":
  684. sValue = (frmchild.checked) ? 1 : 0;
  685. break;
  686. default:
  687. sValue = frmchild.value;
  688. } //end of switch
  689. sheetobj.SetCellValue(row, sheetPreFix + baseSaveName, sValue, uoc);
  690. } //end of for(col)
  691. //정상적인 처리완료
  692. return true;
  693. }
  694. /*----------------------------------------------------------------------------
  695. method : IBS_CopySheet2Form()
  696. desc : 시트의 한 행을 폼객체에 복사
  697. param list
  698. param : json 유형
  699. param 내부 설정값
  700. sheet : 값을 입력 받을 ibsheet 객체 (필수)
  701. form : copy할 폼객체 (필수)
  702. row : ibsheet 객체의 행 (default : 현재 선택된 행)
  703. sheetPreFiex : 맵핑할 시트의 SavaName 앞에 PreFix 문자 (default : "")
  704. formPreFiex : 맵핑할 폼객체의 이름 혹은 id 앞에 PreFix 문자 (default : "")
  705. -----------------------------------------------------------------------------*/
  706. function IBS_CopySheet2Form(param) {
  707. var sheetobj,
  708. formobj,
  709. row,
  710. sheetPreFix,
  711. frmPreFix,
  712. col,
  713. max,
  714. rmax,
  715. colSaveName,
  716. baseSaveName,
  717. sheetvalue,
  718. frmchild,
  719. sType,
  720. sValue;
  721. if ((!param.sheet) || (!param.sheet.IBSheetVersion)) {
  722. IBS_ShowErrMsg("IBS_CopyForm2Sheet 함수의 sheet 인자가 없거나 ibsheet객체가 아닙니다.");
  723. return false;
  724. }
  725. if (param.form == null || typeof param.form != "object" || param.form.tagName != "FORM") {
  726. IBS_ShowErrMsg("IBS_CopyForm2Sheet 함수의 form 인자가 없거나 FORM 객체가 아닙니다.");
  727. return false;
  728. }
  729. sheetobj = param.sheet;
  730. formobj = param.form;
  731. row = param.row == null ? sheetobj.GetSelectRow() : param.row;
  732. sheetPreFix = param.sheetPreFix == null ? "" : param.sheetPreFix;
  733. frmPreFix = param.formPreFix == null ? "" : param.formPreFix;
  734. if (row < 0) {
  735. alert("선택된 행이 존재하지 않습니다.");
  736. return;
  737. }
  738. //Sheet의 컬럼개수만큼 찾아서 HTML의 Form 각 Control에 값을 설정한다.
  739. //컬럼개수만큼 루프 실행
  740. for (col = 0, max = sheetobj.LastCol(); col <= max; col++) {
  741. //컬럼의 별명을 문자열로 가져온다.
  742. colSaveName = sheetobj.ColSaveName(col)
  743. if (colSaveName == "") {
  744. continue;
  745. }
  746. //PreFix가 붙지 않은 형태의 SaveName을 가져온다.
  747. baseSaveName = colSaveName.substring(sheetPreFix.length);
  748. sheetvalue = sheetobj.GetCellText(row, sheetPreFix + baseSaveName);
  749. frmchild = null;
  750. try {
  751. //폼에 있는 해당 이름의 컨트롤을 가져온다.예)"frm_CardNo"
  752. frmchild = formobj[frmPreFix + baseSaveName];
  753. } catch (e) {
  754. }
  755. //폼에 해당하는 이름의 컨트롤이 없는 경우는 계속 진행한다.
  756. if (frmchild == null) {
  757. continue;
  758. }
  759. sType = frmchild.type;
  760. sValue = "";
  761. //radio의 경우 frmchild가 배열형태가 되므로, frmchild.type으로는 타입을 알수 없다.
  762. if (typeof sType == "undefined" && frmchild.length > 0) {
  763. sType = frmchild[0].type;
  764. }
  765. //타입별로 값을 설정한다.
  766. switch (sType) {
  767. case undefined:
  768. case "button":
  769. case "reset":
  770. case "submit":
  771. break;
  772. case "select-one":
  773. frmchild.value = sheetobj.GetCellValue(row, sheetPreFix + baseSaveName);
  774. break;
  775. case "radio":
  776. for (idx = 0, rmax = frmchild.length; idx < rmax; idx++) {
  777. if (frmchild[idx].value == sheetvalue) {
  778. frmchild[idx].checked = true;
  779. break;
  780. }
  781. }
  782. break;
  783. case "checkbox":
  784. frmchild.checked = (sheetobj.GetCellValue(row, sheetPreFix + baseSaveName) == 1);
  785. break;
  786. default:
  787. frmchild.value = sheetvalue;
  788. break;
  789. } //end of switch
  790. } //end of for(col)
  791. //정상적인 처리완료
  792. return true;
  793. }