comm_grd.xjs 110 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name : HIT
  4. * Job Name :
  5. * File Name : comm_grd.xjs
  6. * Creator : tobesoft
  7. * Make Date : 2014-03-06
  8. *
  9. * Description : Grid API
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. * 2014-03-06 tobesoft
  14. *
  15. *---------------------------------------------------------------------------------------
  16. ****************************************************************************************/
  17. /********************************************************************************************************************/
  18. /************************* Grid 일반 *********************************************************************************/
  19. /********************************************************************************************************************/
  20. // grdf_getUpdateRows : 그리드의 데이터가 변경된 row를 반환한다.
  21. // grdf_getGridUpdateData : 그리드 업데이트 데이터 반환, 업데이트 정보가 없을경우 "" 반환 (2014/04/09:변경)
  22. // grdf_setCollapsed : 트리그리드 접기 펼치기 (2014/04/09: 변경)
  23. // grdf_getTreePath : 트리그리드 Tree Pass
  24. // grdf_getFirstCell : 첫번째 cell (2014.04.01: 변경)
  25. // grdf_getLastCell : 마지막 cell (2014.04.01: 변경)
  26. // grdf_exportExcel : Export Grid to Excel (2014.06.10: 변경)
  27. // (삭제)grdf_OnExport : Exprting Progressbar
  28. // grdf_exportCsv : Export Grid to CSV (2014.05.20:변경)
  29. // grdf_ImportExcel : Import Excel to Grid
  30. // grdf_setColumn : 그리드 컬럼 추가 / 제거
  31. // grdf_setStatus : 그리드 상태표시 값 변경
  32. // (삭제)grdf_valueCheck : 입력된 그리드의 컬럼값 NULL CHECK
  33. // grdf_sortNodeList : 오름차순 내림차순 mode (2014.04.04 : 변경)
  34. // grdf_initGrid : 그리드의 sort기능과 전체체크기능을 세텡한다.
  35. // grdf_setEventGrid : 그리드의 sort기능과 전체체크 이벤트중 checkbox이면 전체 체크이벤틀고 아니면 sort 이벤트로 분기한다.
  36. // grdf_setGridSort : Grid Sort기능 이벤트 추가
  37. // grdf_gridSort : Grid Sort
  38. // grdf_clearSort : Grid Sort clear
  39. // grdf_setRowTypeIcon : 그리드 상태 아이콘 보여주기
  40. // grdf_clipboardCopy :그리드 선택 영역을 클립보드에 복사하기
  41. // grdf_clipboardPaste :그리드 선택 영역에 붙여넣기 (2014.04.18 : 변경)
  42. // grdf_setAllCheck : 그리드 전체체크 관련 이벤트 추가 함수
  43. // grdf_setGridCheckAll : When you click a grid header, the entire check
  44. // grdf_columnSetData : chkval 값에 따라 컬럼에 데이터 입력
  45. // grdf_getKeyCols : 그리드의 컬럼의 속성이 true인 것의 col index array
  46. // grdf_setToolTipBind : 그리드의 tooltip을 자동으로 세팅한다. (2014.04.02 : 변경)
  47. // grdf_setCellStyle : 그리드 Cell Style 지정
  48. // grdf_setRowStyle : 그리드 Row Style 지정
  49. // grdf_initGridStyle : 그리드 Style 초기화
  50. // grdf_setToolTipBind : 그리드의 tooltip을 자동으로 세팅한다. (2014.04.02 : 변경)
  51. // grdf_setCellStyle : 그리드 Cell Style 지정 (2014.04.10 : 신규)
  52. // grdf_setRowStyle : 그리드 Row Style 지정 (2014.04.10 : 신규)
  53. // grdf_initGridStyle : 그리드 Style 초기화 (2014.04.10 : 신규)
  54. // grdf_addHeadClickHandler : 그리드 전체체크/해제 실적용구현(2014.04.29)
  55. // grdf_setGridCheckInfo: 그리드 head 클릭시 body Cell Index 구해오기(2014.05.12)
  56. // grdf_exportExcelMulti: 다수 그리드 sheet별 저장(2014.06.10: 변경)
  57. // grdf_setCellMask: 그리드 Cell Mask 처리시 null 인경우 Mask 처리 안함
  58. // grdf_getSelectedCols : 그리드의 선택된 컬럼index를 리턴(숨겨준 컬럼은 제외) (2014.08.22 : 신규)
  59. // grdf_getSelectedRows : 그리드의 선택된 로우index를 리턴 (2014.11.04 : 신규)
  60. // grdf_setSelectedCell : 그리드의 선택 영역을 체크하여 미선택 영역이면 선택 시켜준다 (2015.09.03 : 신규)
  61. // grdf_setStatusColumn : 데이터셋에 그리드의 rowType에 따라 status 컬럼의 값을 업데이트 시켜준다. (2014.08.29 : 신규)
  62. // grdf_expandTree : Tree로 구성된 그리드에서 특정 위치까지 Tree를 expand 시켜준다. (2014.11.13 : 신규)
  63. // grdf_expandDepth : Tree로 구성된 그리드에서 lvl에 해당 하는 특정 위치까지 Tree를 expand 시켜준다. (2015.01.13 : 신규)
  64. // grdf_setGridEllipsisText : 실제 Cell의 크기와 글자 길이에 따라 '...'을 붙혀서 값을 반환하고나 셀의 align을 설정해준다.(2016.09.27 : 신규)
  65. // grdf_setGridIsEdit : 그리드 autoenter key 모드에서 키(Del/Enter) 동작에 따른 Edit 상태 체크(2016.10.07 : 신규)
  66. // grdf_getBindCellName : 그리드에서 컬럼 인덱스로 바인드된 데이터셋의 컬럼명을 가져온다.(2016.11.08 : 신규 - 각 업무단에 흩어져 있어서 공통 함수로 추가함)
  67. // grdf_validGridTime : Grid를 시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용) (2017-02-13)
  68. // grdf_validGridDateTime : Grid를 날짜+시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용) (2017-02-13)
  69. // grdf_controlGridCalendar : Grid Calendar 클릭횟수를 줄이기 위한 함수.(oncellclick함수에 사용) (2017-04-03)
  70. /**********************************************************************************
  71. * 함수명 : grdf_getUpdateRows
  72. * 설명 : 그리드의 데이터가 변경된 row를 반환한다.
  73. * argument : String gridID - 그리드 아이디
  74. String status - 상태(insert, update, delete)
  75. Array rowArray - dataset row index array
  76. * return Type : Array arrRow - insert, update, delete의 dataset row index
  77. * 작성자 : tobesoft
  78. ex) grdf_getUpdateRows("Grid02", "update", ""); //return array(1,2,7,8) //row Index
  79. **********************************************************************************/
  80. function grdf_getUpdateRows( gridID, status, rowsArray ) {
  81. var gridObj = eval(gridID);
  82. var bindDs = eval(gridObj.binddataset);
  83. var nStatus =0;
  84. var nRowsArrayLen = 0;
  85. var arrRow = new Array();
  86. if(status == "insert")
  87. {
  88. nStatus = 2;
  89. }
  90. else if(status == "update")
  91. {
  92. nStatus = 4;
  93. }
  94. else if(status == "delete")
  95. {
  96. nStatus = 8;
  97. }
  98. if(!utlf_isNull(rowsArray))
  99. {
  100. arrRow = rowsArray;
  101. }
  102. if(status == "insert" || status == "update" || status == "delete" )
  103. {
  104. var nRowType; //row type
  105. for(var i =0; i < bindDs.getRowCount(); i++)
  106. {
  107. nRowType = bindDs.getRowType(i);
  108. //nStatus == 0 이면 insert, update, delete상태값
  109. if(nStatus == 0)
  110. {
  111. if( nRowType == 2|| nRowType == 4 || nRowType == 8 )
  112. {
  113. arrRow.push(i);
  114. }
  115. }
  116. else
  117. {
  118. if(nStatus == nRowType)
  119. {
  120. arrRow.push(i);
  121. }
  122. }
  123. }
  124. }
  125. return arrRow;
  126. }
  127. /**********************************************************************************
  128. * 함수명 : grdf_getUpdateData(삭제예정)
  129. * 설명 : 그리드의 데이터가 변경된 row를 반환한다.
  130. * argument : String gridID - 그리드 아이디
  131. String status - 상태(insert, update, delete)
  132. rowArray - array
  133. * return Type : Array
  134. * 작성자 : tobesoft
  135. **********************************************************************************/
  136. function grdf_getUpdateData(objGrd, sStatus)
  137. {
  138. }
  139. /**********************************************************************************
  140. * 함수명 : grdf_getGridUpdateData
  141. * 설명 : 그리드 업데이트 데이터 반환, 업데이트 정보가 없을경우 "" 반환
  142. * argument : Object gridObj - 그리드
  143. String statusType - 상태("insert","update","delete","all")
  144. * return Type : Object Dataset
  145. * 작성자 : tobesoft
  146. **********************************************************************************/
  147. function grdf_getGridUpdateData(gridObj, statusType)
  148. {
  149. var bindDs = eval(gridObj.binddataset);
  150. var arrRow = new Array();
  151. var nStats = null; //초기행의 상태
  152. var sStats = "";
  153. if(statusType == "insert")
  154. {
  155. nStats = 2;
  156. sStats = "I";
  157. }
  158. else if(statusType == "update")
  159. {
  160. nStats = 4;
  161. sStats = "U";
  162. }
  163. else if(statusType == "delete")
  164. {
  165. nStats = 8;
  166. sStats = "D";
  167. }
  168. if(utlf_isNull(nStats)){
  169. sStats = "all";
  170. }
  171. var objTempFilterDs = this.objects[dsf_createDs("ds_tempFilterDs")];//new Dataset;
  172. //objTempFilterDs.name = "ds_tempFilterDs";
  173. objTempFilterDs.copyData(bindDs);
  174. objTempFilterDs.clearData();
  175. objTempFilterDs.enableevent = false;
  176. //statusType에 맞는 row index array에 저장
  177. for(var i = 0; i < bindDs.getRowCount(); i++)
  178. {
  179. var nType = bindDs.getRowType(i);
  180. if(sStats == "all"){
  181. if(nType == 2 || nType == 4 || nType == 8)
  182. {
  183. var sType;
  184. if(nType == 2) sType = "I";
  185. if(nType == 4) sType = "U";
  186. if(nType == 8) sType = "D";
  187. var addRow = objTempFilterDs.addRow();
  188. objTempFilterDs.copyRow(addRow,bindDs,i);
  189. objTempFilterDs.updatecontrol = false;
  190. objTempFilterDs.setRowType(addRow,sType);
  191. objTempFilterDs.updatecontrol = true;
  192. }
  193. }else{
  194. if(nStats == nType)
  195. {
  196. var addRow = objTempFilterDs.addRow();
  197. objTempFilterDs.copyRow(addRow,bindDs,i);
  198. objTempFilterDs.updatecontrol = false;
  199. objTempFilterDs.setRowType(addRow,sStats);
  200. objTempFilterDs.updatecontrol = true;
  201. }
  202. }
  203. }
  204. objTempFilterDs.enableevent = true;
  205. return objTempFilterDs;
  206. }
  207. /************************************************************************************************
  208. * 함수명 : grdf_setCollapsed
  209. * 설명 : 트리그리드 접기 펼치기
  210. * argument : Object gridObj - 그리드 오브텍트
  211. Number nRow -Row number
  212. Boolean collapsed: true - Expand, false - Collapse, null 판단하여 처리
  213. * return Type : none
  214. * 작성자 : tobesoft
  215. ************************************************************************************************/
  216. function grdf_setCollapsed(gridObj,nRow,bStatus)
  217. {
  218. var lv_oDs = eval(gridObj.binddataset);
  219. var gridRow = gridObj.getTreeRow(nRow);
  220. var nChidCnt = gridObj.getTreeChildCount(gridRow, false);
  221. var lv_aTree = grdf_getTreePath(gridObj,nRow);
  222. var nCompareRow = -1;
  223. var nLeafRow = -1;
  224. if (gridObj.isTreeLeafRow(parseInt(lv_aTree[0])) == true){
  225. nLeafRow = parseInt(lv_aTree[1]);
  226. }else{
  227. nLeafRow = parseInt(lv_aTree[0]);
  228. }
  229. if(!utlf_isNull(bStatus)){ //펼쳐야 할지 접어야야 할지가 파라미터로 fix되어 있는경우
  230. for(var i= lv_aTree.length -1; i>= 1; i--)
  231. {
  232. var nRow2 = parseInt(lv_aTree[i]);
  233. var nGRow = gridObj.getTreeRow(nRow2) ;
  234. if (gridObj.isTreeLeafRow(nRow2) == false)
  235. gridObj.setTreeStatus(nGRow,bStatus);
  236. }
  237. lv_oDs.rowposition = nRow;
  238. lv_oDs.selectRow(nRow);
  239. }else{ //접혀 있으면 펼치고 펼쳐저있으면 접는 작업을 자동으로 판단하여 실행
  240. //판단로직
  241. for(var i= lv_aTree.length -1; i>= 0; i--)
  242. {
  243. if(gridObj.isTreeLeafRow(parseInt(lv_aTree[i])) == false){
  244. var nRow2 = parseInt(lv_aTree[i]);
  245. //일괄판단
  246. if(utlf_isNull(bStatus) || bStatus == false){
  247. if(gridObj.getTreeStatus(nRow2) == 0 ){
  248. bStatus = true;
  249. }else{
  250. if(!utlf_isNull(nCompareRow))nCompareRow = nRow2
  251. bStatus = false;
  252. }
  253. }
  254. }
  255. //상위는 전부 펼쳐저 있는데 마지막만 접혀 있을 경우
  256. if(gridObj.getTreeStatus(nLeafRow) == 0 && !bStatus ){
  257. bStatus = null;
  258. break;
  259. }
  260. }
  261. //판단을 실행
  262. if((bStatus == false && (nCompareRow == parseInt(nLeafRow))) || utlf_isNull(bStatus)){
  263. if (gridObj.isTreeLeafRow(parseInt(lv_aTree[0])) == true){
  264. var nRow2 = parseInt(lv_aTree[1]);
  265. }else{
  266. var nRow2 = parseInt(lv_aTree[0]);
  267. }
  268. var nGRow = gridObj.getTreeRow(nRow2) ;
  269. if(utlf_isNull(bStatus)){
  270. gridObj.setTreeStatus(nGRow,true);
  271. lv_oDs.rowposition = parseInt(parseInt(lv_aTree[0]));
  272. lv_oDs.selectRow(parseInt(lv_aTree[0]));
  273. }else{
  274. gridObj.setTreeStatus(nGRow,false);
  275. lv_oDs.rowposition = parseInt(nRow2);
  276. lv_oDs.selectRow(parseInt(nRow2));
  277. }
  278. }else{//전부 접혀 있는 경우 해당 루트까지 모두 펼침
  279. for(var i= lv_aTree.length -1; i>= 1; i--)
  280. {
  281. var nRow2 = parseInt(lv_aTree[i]);
  282. var nGRow = gridObj.getTreeRow(nRow2) ;
  283. if (gridObj.isTreeLeafRow(nRow2) == false)
  284. gridObj.setTreeStatus(nGRow,bStatus);
  285. }
  286. lv_oDs.rowposition = parseInt(lv_aTree[0]);
  287. lv_oDs.selectRow(parseInt(lv_aTree[0]));
  288. }
  289. }
  290. }
  291. /************************************************************************************************
  292. * 함수명 : grdf_getTreePath
  293. * 설명 : 트리그리드 Tree Pass(상위 node 의 root row정보 얻기)
  294. * argument : Object oElement - 그리드 Object
  295. Number nRow -Row number
  296. * return Type : array lv_aTree
  297. * 작성자 : tobesoft
  298. ************************************************************************************************/
  299. function grdf_getTreePath(oElement,nRow)
  300. {
  301. var lv_aTree = new Array();
  302. lv_aTree[0] = nRow;
  303. var nPRow = oElement.getTreeParentRow(nRow);
  304. while (nPRow != -1)
  305. {
  306. lv_aTree[lv_aTree.length] = nPRow;
  307. nPRow = oElement.getTreeParentRow(nPRow);
  308. }
  309. return lv_aTree;
  310. }
  311. /************************************************************************************************
  312. * 함수명 : grdf_getFirstCell
  313. * 설명 : 첫번째 cell
  314. * argument : Object objGrd - grid
  315. * return Type : obj
  316. * 작성자 : tobesoft
  317. ************************************************************************************************/
  318. function grdf_getFirstCell( objGrd ) {
  319. var bindDs = eval(objGrd.binddataset);
  320. if(objGrd.selecttype == "multiarea" || objGrd.selecttype == "area" ) {
  321. var lv_nAreaStartRow = parseInt(objGrd.selectstartrow);
  322. var lv_nAreaStartCol = parseInt(objGrd.selectstartcol);
  323. } else {
  324. var lv_nAreaStartRow = parseInt(objGrd.selectstartrow);
  325. var lv_nAreaStartCol = parseInt(objGrd.selectstartcol);
  326. }
  327. var obj = new Object();
  328. if(lv_nAreaStartCol == -1) lv_nAreaStartCol = 0;
  329. obj.col = lv_nAreaStartCol;
  330. obj.row = lv_nAreaStartRow;
  331. return obj;
  332. }
  333. /************************************************************************************************
  334. * 함수명 : grdf_getLastCell
  335. * 설명 : 마지막 cell
  336. * argument : Object objGrd - grid
  337. * return Type : tmpCell
  338. * 작성자 : tobesoft
  339. ************************************************************************************************/
  340. function grdf_getLastCell( objGrd ) {
  341. var bindDs = eval(objGrd.binddataset);
  342. if(objGrd.selecttype == "multiarea" || objGrd.selecttype == "area" || objGrd.selecttype == "cell") {
  343. var lv_nAreaEndRow = parseInt(objGrd.selectendrow);
  344. var lv_nAreaEndCol = parseInt(objGrd.selectendcol);
  345. } else {
  346. var lv_nAreaEndRow = parseInt(objGrd.selectendrow);
  347. var lv_nAreaEndCol = objGrd.getCellCount("body") - 1;
  348. }
  349. var obj = new Object();
  350. if(lv_nAreaEndCol == -1) lv_nAreaEndCol = 0;
  351. obj.col = lv_nAreaEndCol;
  352. obj.row = lv_nAreaEndRow;
  353. return obj;
  354. }
  355. /************************************************************************************************
  356. * 함수명 : grdf_exportExcel
  357. * 설명 : Export Grid to Excel
  358. * argument : objGrid Dataset Object
  359. sFileName Excel File Name
  360. sSheetName Excel Sheet Name
  361. sOpt filename modity true/false(true : 원래 파일명 , false : 원래 파일명에 "_년월일시분초"를 추가한 파일명
  362. sFilePath file path
  363. sfileOpen String FileOpen (default:none) (open:엑셀오픈, none:엑셀오픈안함, user:엑셀오픈여부선택)
  364. bRemove size 0 인 Cell을 숨기기로 보여줄것인지 아니면 삭제하여 보여줄것인지의 여부
  365. true : 숨기기
  366. false : 삭제 (default)
  367. sStyle strExceptStyle( color, background, font, align, wordwrap 적용하지 않을 항목 ',' 로 복수 나열)
  368. bNoLog 엑셀 다운로드시 로그를 남기지 않도록 함 (true : 로그 남기지 않음)
  369. * return Type : none
  370. * 작성자 : tobesoft
  371. ex)grdf_exportExcel(Grid04, "exportExcel", "see"); //파일 다이얼로그로 저장위치 저장
  372. grdf_exportExcel(Grid04, "exportExcel", "see", false, "" ,"user"); //파일 다이얼로그로 저장위치 저장(파일 바로오픈)
  373. grdf_exportExcel(Grid04, "testFile", "see",false,"C:\\"); //파일 path로 저장
  374. grdf_exportExcel(Grid04, "testFile", "see",false,"C:\\","user",true); //파일 path로 저장(파일 바로오픈) ,size 0 인 셀 숨기기로 표현
  375. ************************************************************************************************/
  376. var iv_sFilePath;
  377. var lv_VirtualFile = new VirtualFile(); // 엑셀 파일 저장시 삭제용 VirtualFile Object
  378. function grdf_exportExcel(objGrid, strFileName, strSheetName, sOpt, sFilePath, sfileOpen, bRemove, sStyle, bNoLog)
  379. {
  380. // 엑셀 다운로드시 objGrid에 Dataset등 다른 컴포넌트때문에 오류 발생시 리턴.
  381. if(objGrid.toString() != '[object Grid]')
  382. {
  383. return application.alert('Grid Component가 없습니다.');
  384. }
  385. if (lv_VirtualFile != null)
  386. {
  387. // 기 존재하는 파일 삭제
  388. if (lv_VirtualFile.open(VirtualFile.openRead))
  389. {
  390. VirtualFile.delete(lv_VirtualFile);
  391. lv_VirtualFile.close();
  392. lv_VirtualFile = null;
  393. }
  394. }
  395. //저장모드 여부
  396. var bSave = true;
  397. if(utlf_isNull(bSave))
  398. {
  399. bSave = true;
  400. }
  401. //fileopen 여부
  402. if(utlf_isNull(sfileOpen)){
  403. sfileOpen = "none";
  404. }else{
  405. sfileOpen = String(sfileOpen).toUpperCase();
  406. }
  407. //Cell Size 0인것을 숨길것인지 삭제할것인지에 대한여부
  408. if(utlf_isNull(bRemove))
  409. {
  410. bRemove = false;
  411. }
  412. // strExceptStyle 초기화
  413. if(utlf_isNull(sStyle) || (!utlf_isNull(sStyle)
  414. && sStyle.indexOf("color") == -1
  415. && sStyle.indexOf("background") == -1
  416. && sStyle.indexOf("font") == -1
  417. && sStyle.indexOf("align") == -1
  418. && sStyle.indexOf("wordwrap") == -1) ){
  419. sStyle = "";
  420. }
  421. //trace("sfileOpen::" + sfileOpen);
  422. // Excel File명에 시간정보를 추가하여 중복되지 않게 한다.
  423. if(sOpt) //파일명 변경 안함
  424. {
  425. strFileName = strFileName ;
  426. }
  427. else //파일명에 시간 붙여서 파일명 생성
  428. {
  429. var to_day = new Date();
  430. //strFileName = strFileName + "_" + to_day.getTime();
  431. var strToday = to_day.getFullYear() + "";
  432. strToday += utlf_right("0" + (to_day.getMonth() + 1), 2);
  433. strToday += utlf_right("0" + to_day.getDate(), 2);
  434. strToday += utlf_right("0" + to_day.getHours(), 2);
  435. strToday += utlf_right("0" + to_day.getMinutes(), 2);
  436. strToday += utlf_right("0" + to_day.getSeconds(), 2);
  437. //var nHours = to_day.getHours();
  438. //var nMinutes = to_day.getMinutes();
  439. //var nSeconds = to_day.getSeconds();
  440. //strFileName = strFileName + "_" + utlf_today() + "" + nHours + "" + nMinutes + "" + nSeconds;
  441. strFileName = strFileName + "_" + strToday ;
  442. }
  443. // 1000건 이상의 데이터를 엑셀 다운로드 할 경우 사유를 입력 받고 보안로그에 저장
  444. var reason;
  445. var downloadcount = objGrid.rowcount;
  446. if(bNoLog != true) {
  447. var dutplceinstcd = sysf_getUserInfo("dutplceinstcd");
  448. if(downloadcount >= 1000 && dutplceinstcd != "033") { // 대량다운로드 사유 입력
  449. reason = frmf_modal("SPZSE00100", "SPZSE00100", null, null, null, null, null, null, null, null, null, null, "M");
  450. if(utlf_isNull(reason)) {
  451. return;
  452. }
  453. }
  454. }
  455. // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
  456. if (bSave && utlf_isNull(sFilePath))
  457. {
  458. var fd = new FileDialog();
  459. var vFile_down = fd.open("Excel Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
  460. if (utlf_isNull(vFile_down))
  461. {
  462. return;
  463. }
  464. strFileName = vFile_down.filename;
  465. }
  466. //그리드를 엑셀로 만드는 동안 Loading Image가 보이게 한다.
  467. this.setWaitCursor(true,true);
  468. var objExport = new ExportObject();
  469. objExport.exporttype = ExportTypes.EXCEL;
  470. objExport.activepagename = strSheetName;
  471. if(bSave)
  472. {
  473. objExport.exportopenmode = "overwrite"; // existopen, overwrite, noopen
  474. objExport.exportsavemode = "save"; // save, nosave
  475. objExport.exportactivemode = "noactive";
  476. }
  477. else
  478. {
  479. objExport.exportopenmode = "noopen"; // existopen, overwrite, noopen
  480. objExport.exportsavemode = "nosave"; // save, nosave
  481. objExport.exportactivemode = "active";
  482. }
  483. objExport.exportfilename = strFileName.replace(".xlsx","")+".xlsx";
  484. // 칼럼 0번째 expr로 체크박스 여부 판단.
  485. var strExpr = objGrid.getCellProperty("body",0,"expr");
  486. var strText = objGrid.getCellProperty("body",0,"text");
  487. var strDispalyType = objGrid.getCellProperty("body",0,"displaytype");
  488. // 그리드에서 checkbox 속성을 스크립트(array)로 바인딩 시킨 경우 엑셀 export시 칼럼을 제외시킴
  489. if(strExpr=="expr:v_ChkGrdList[currow]" || strText=="expr:v_ChkGrdList[currow]" ||strDispalyType =="checkbox" || strDispalyType =="image" ) // 체크박스 제거 후 export
  490. {
  491. //1. 탬프그리드 생성.
  492. var objGridTemp = new Grid("grd_temp", 0, 100, 100, 200);
  493. this.addChild("grd_temp", objGridTemp);
  494. //2. 원본 그리드 포맷 카피.
  495. //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
  496. var fomat = '<Formats>';
  497. fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
  498. fomat += '</Formats>';
  499. objGridTemp.formats = fomat;
  500. // 칼럼사이즈 처리
  501. //trace("ColCount::"+objNewGrid.getCellCount("body"));
  502. for(var i=0;i<objGridTemp.getCellCount("body");i++)
  503. {
  504. var nRow = objGrid.getCellProperty("body", i, "row");
  505. if(nRow == 0) {
  506. var norgColSize = objGrid.getRealColSize(i);
  507. objGridTemp.setFormatColProperty(i,"size", norgColSize);
  508. }
  509. }
  510. //size 0 제거
  511. if(bRemove == false){
  512. for(var i=(objGrid.getCellCount("Head")-1);i>=0;i--)
  513. {
  514. var nRow = objGrid.getCellProperty("Head", i, "row");
  515. var nCol = objGrid.getCellProperty("Head", i, "col");
  516. var nColSpan = objGrid.getCellProperty("Head", i, "colspan");
  517. var nSize = objGrid.getRealColSize(nCol);
  518. var sTitleText = objGrid.getCellProperty("head", i, "text");
  519. var sColType = objGrid.getCellProperty("head", i, "displaytype");
  520. //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
  521. if(nRow == 0 && nSize == 0) {
  522. if(nColSpan == 1) {
  523. //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
  524. objGridTemp.deleteContentsCol("body", nCol, false);
  525. } else {
  526. for(var j=(nCol+nColSpan-1);j>=nCol;j--)
  527. {
  528. //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
  529. objGridTemp.deleteContentsCol("body", j, false);
  530. }
  531. }
  532. }
  533. }
  534. }
  535. //3. 체크박스 제거(0번째 칼럼)
  536. objGridTemp.deleteContentsCol(0);
  537. //4. Dataset동적 바인딩.
  538. objGridTemp.binddataset = objGrid.binddataset;
  539. //5. 그리드 visible: false, show()
  540. objGridTemp.visible = false;
  541. objGridTemp.show();
  542. objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, strSheetName + "!A1", "", "", "", "", "", sStyle);
  543. objExport.export();
  544. objExport = null;
  545. //6. temp그리드 삭제.
  546. this.removeChild("grd_temp");
  547. objGridTemp.destroy();
  548. objGridTemp = null;
  549. } else { // Grid원본 export
  550. //1. 탬프그리드 생성.
  551. var objGridTemp = new Grid("grd_temp", 0, 100, 100, 200);
  552. this.addChild("grd_temp", objGridTemp);
  553. //2. 원본 그리드 포맷 카피.
  554. //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
  555. var fomat = '<Formats>';
  556. fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
  557. fomat += '</Formats>';
  558. objGridTemp.formats = fomat;
  559. // 칼럼사이즈 처리
  560. //trace("ColCount::"+objNewGrid.getCellCount("body"));
  561. for(var i=0;i<objGridTemp.getCellCount("body");i++)
  562. {
  563. var nRow = objGrid.getCellProperty("body", i, "row");
  564. if(nRow == 0) {
  565. var norgColSize = objGrid.getRealColSize(i);
  566. objGridTemp.setFormatColProperty(i,"size", norgColSize);
  567. }
  568. }
  569. //size 0 제거
  570. if(bRemove == false){
  571. for(var i=(objGrid.getCellCount("Head")-1);i>=0;i--)
  572. {
  573. var nRow = objGrid.getCellProperty("Head", i, "row");
  574. var nCol = objGrid.getCellProperty("Head", i, "col");
  575. var nColSpan = objGrid.getCellProperty("Head", i, "colspan");
  576. var nSize = objGrid.getRealColSize(nCol);
  577. var sTitleText = objGrid.getCellProperty("head", i, "text");
  578. var sColType = objGrid.getCellProperty("head", i, "displaytype");
  579. //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
  580. if(nRow == 0 && nSize == 0) {
  581. if(nColSpan == 1) {
  582. //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
  583. objGridTemp.deleteContentsCol("body", nCol, false);
  584. } else {
  585. for(var j=(nCol+nColSpan-1);j>=nCol;j--)
  586. {
  587. //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
  588. objGridTemp.deleteContentsCol("body", j, false);
  589. }
  590. }
  591. }
  592. }
  593. }
  594. //4. Dataset동적 바인딩.
  595. objGridTemp.binddataset = objGrid.binddataset;
  596. //5. 그리드 visible: false, show()
  597. objGridTemp.visible = false;
  598. objGridTemp.show();
  599. objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, strSheetName + "!A1", "", "", "", "", "", sStyle);
  600. objExport.export();
  601. objExport = null;
  602. //6. temp그리드 삭제.
  603. this.removeChild("grd_temp");
  604. objGridTemp.destroy();
  605. objGridTemp = null;
  606. }
  607. var exeFileNM;
  608. if (bSave)
  609. {
  610. // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
  611. var objExtCommon = new ExtCommon();
  612. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  613. var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
  614. var newFilePath;
  615. if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
  616. {
  617. newFilePath = sFilePath + strFileName.replace(".xlsx","") + ".xlsx";
  618. }
  619. else
  620. {
  621. var sFile = vFile_down.fullpath;
  622. newFilePath = sFile.replace(".xlsx","") + ".xlsx";
  623. }
  624. if(preFilePath == newFilePath) {
  625. exeFileNM = preFilePath;
  626. } else {
  627. if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
  628. var rtn = objExtCommon.MoveFile(preFilePath, newFilePath, false);
  629. exeFileNM = newFilePath;
  630. }
  631. }else{
  632. var objExtCommon = new ExtCommon();
  633. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  634. var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
  635. exeFileNM = preFilePath;
  636. }
  637. // 여기까지 왔으면 엑셀 저장은 완료된 것으로 보고 엑셀 저장에 대한 보안로그 남김
  638. if(bNoLog != true) {
  639. dsf_createDsRow("ds_exceldownload_log", [{col:"scrncd", type:"string", size:256, val:frmf_getScreenID()}
  640. , {col:"reason", type:"string", size:256, val:reason}
  641. , {col:"downloadcount", type:"string", size:256, val:downloadcount}]);
  642. var oParam = {};
  643. oParam.id = "TXZSE00300";
  644. oParam.service = "securityapp.SecurityLoggingMngt";
  645. oParam.method = "reqSetSecurityLog";
  646. oParam.inds = "req=" + "ds_exceldownload_log";
  647. oParam.async = true;
  648. tranf_submit(oParam);
  649. }
  650. if(sfileOpen == "OPEN"){
  651. //EXCEL에서 열기
  652. objExtCommon.executeProcess(exeFileNM, "","");
  653. }else if(sfileOpen == "USER"){
  654. var bOK;
  655. bOK = confirm( "엑셀을 열어보시겠습니까?", "확인", "question");
  656. if(bOK){
  657. objExtCommon.executeProcess(exeFileNM, "","");
  658. }
  659. }
  660. this.setWaitCursor(false,true);
  661. }
  662. /************************************************************************************************
  663. * 함수명 : grdf_exportExcelMulti
  664. * 설명 : Export Grid to Excel
  665. * argument : objGrid Grid String Object
  666. sFileName Excel File Name
  667. sSheetName Excel Sheet String Name
  668. sOpt filename modity true/false(true : 원래 파일명 , false : 원래 파일명에 "_년월일시분초"를 추가한 파일명
  669. sFilePath file path
  670. sfileOpen String FileOpen (default:none) (open:엑셀오픈, none:엑셀오픈안함, user:엑셀오픈여부선택)
  671. bRemove size 0 인 Cell을 숨기기로 보여줄것인지 아니면 삭제하여 보여줄것인지의 여부
  672. true : 숨기기
  673. false : 삭제 (default)
  674. * return Type : none
  675. * 작성자 : tobesoft
  676. ex) var sGrd = "Grid00,Div00.Grid01";
  677. var sSheet = "GridSheetTest,GridSheetTest2";
  678. grdf_exportExcelMulti(sGrd, "exportExcel", sSheet); //파일 다이얼로그로 저장위치 저장
  679. grdf_exportExcelMulti(sGrd, "exportExcel", sSheet,"true,"","USER"); //파일 다이얼로그로 저장위치 저장
  680. grdf_exportExcelMulti(sGrd, "exportExcel", sSheet,false,"C:\\aaa\\");
  681. grdf_exportExcelMulti(sGrd, "exportExcel", sSheet,false,"C:\\aaa\\","user",true);
  682. ************************************************************************************************/
  683. function grdf_exportExcelMulti(sObjGrid, strFileName, strSheetName, sOpt, sFilePath, sfileOpen, bRemove)
  684. {
  685. var aGrid = sObjGrid.split(",");
  686. var aSheet = strSheetName.split(",");
  687. var bTemp = false;
  688. if (lv_VirtualFile != null)
  689. {
  690. // 기 존재하는 파일 삭제
  691. if (lv_VirtualFile.open(VirtualFile.openRead))
  692. {
  693. VirtualFile.delete(lv_VirtualFile);
  694. lv_VirtualFile.close();
  695. lv_VirtualFile = null;
  696. }
  697. }
  698. //저장모드 여부
  699. var bSave = true;
  700. if(utlf_isNull(bSave))
  701. {
  702. bSave = true;
  703. }
  704. //Cell Size 0인것을 숨길것인지 삭제할것인지에 대한여부
  705. if(utlf_isNull(bRemove))
  706. {
  707. bRemove = false;
  708. }
  709. //fileopen 여부
  710. if(utlf_isNull(sfileOpen)){
  711. sfileOpen = "none";
  712. }else{
  713. sfileOpen = String(sfileOpen).toUpperCase();
  714. }
  715. // Excel File명에 시간정보를 추가하여 중복되지 않게 한다.
  716. if(sOpt) //파일명 변경 안함
  717. {
  718. strFileName = strFileName ;
  719. }
  720. else //파일명에 시간 붙여서 파일명 생성
  721. {
  722. var to_day = new Date();
  723. var strToday = to_day.getFullYear() + "";
  724. strToday += utlf_right("0" + (to_day.getMonth() + 1), 2);
  725. strToday += utlf_right("0" + to_day.getDate(), 2);
  726. strToday += utlf_right("0" + to_day.getHours(), 2);
  727. strToday += utlf_right("0" + to_day.getMinutes(), 2);
  728. strToday += utlf_right("0" + to_day.getSeconds(), 2);
  729. strFileName = strFileName + "_" + strToday ;
  730. }
  731. // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
  732. if (bSave && utlf_isNull(sFilePath))
  733. {
  734. var fd = new FileDialog();
  735. var vFile_down = fd.open("Excel Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
  736. if (utlf_isNull(vFile_down))
  737. {
  738. return;
  739. }
  740. strFileName = vFile_down.filename;
  741. }
  742. var objExport = new ExportObject();
  743. objExport.exporttype = ExportTypes.EXCEL;
  744. if(bSave)
  745. {
  746. objExport.exportopenmode = "overwrite"; // existopen, overwrite, noopen
  747. objExport.exportsavemode = "save"; // save, nosave
  748. objExport.exportactivemode = "noactive";
  749. }
  750. else
  751. {
  752. objExport.exportopenmode = "noopen"; // existopen, overwrite, noopen
  753. objExport.exportsavemode = "nosave"; // save, nosave
  754. objExport.exportactivemode = "active";
  755. }
  756. objExport.exportfilename = strFileName.replace(".xlsx","")+".xlsx";
  757. var grdCnt = 0;
  758. for(var i=0; i<aGrid.length; i++){
  759. objGrid = eval(aGrid[i]);
  760. // 엑셀 다운로드시 objGrid에 Dataset등 다른 컴포넌트때문에 오류 발생시 리턴.
  761. if(objGrid.toString() != '[object Grid]')
  762. {
  763. return application.alert('Grid Component가 없습니다.');
  764. }
  765. // 칼럼 0번째 expr로 체크박스 여부 판단.
  766. var strExpr = objGrid.getCellProperty("body",0,"expr");
  767. var strText = objGrid.getCellProperty("body",0,"text");
  768. var strDispalyType = objGrid.getCellProperty("body",0,"displaytype");
  769. // 그리드에서 checkbox 속성을 스크립트(array)로 바인딩 시킨 경우 엑셀 export시 칼럼을 제외시킴
  770. if(strExpr=="expr:v_ChkGrdList[currow]" || strText=="expr:v_ChkGrdList[currow]" ||strDispalyType =="checkbox" || strDispalyType =="image" ) // 체크박스 제거 후 export
  771. {
  772. //1. 탬프그리드 생성.
  773. var objGridTemp = new Grid("grd_temp"+String(grdCnt), 0, 100, 100, 200);
  774. this.addChild("grd_temp"+String(grdCnt), objGridTemp);
  775. grdCnt++;
  776. //trace(objGridTemp.name);
  777. //2. 원본 그리드 포맷 카피.
  778. //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
  779. var fomat = '<Formats>';
  780. fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
  781. fomat += '</Formats>';
  782. objGridTemp.formats = fomat;
  783. // 칼럼사이즈 처리
  784. //trace("ColCount::"+objNewGrid.getCellCount("body"));
  785. for(var ii=0;ii<objGridTemp.getCellCount("body");ii++)
  786. {
  787. var nRow = objGrid.getCellProperty("body", ii, "row");
  788. if(nRow == 0) {
  789. var norgColSize = objGrid.getRealColSize(ii);
  790. objGridTemp.setFormatColProperty(ii,"size", norgColSize);
  791. }
  792. }
  793. //size 0 제거
  794. if(bRemove == false){
  795. for(var removeRow=(objGrid.getCellCount("Head")-1);removeRow>=0;removeRow--)
  796. {
  797. var nRow = objGrid.getCellProperty("Head", removeRow, "row");
  798. var nCol = objGrid.getCellProperty("Head", removeRow, "col");
  799. var nColSpan = objGrid.getCellProperty("Head", removeRow, "colspan");
  800. var nSize = objGrid.getRealColSize(nCol);
  801. var sTitleText = objGrid.getCellProperty("head", removeRow, "text");
  802. var sColType = objGrid.getCellProperty("head", removeRow, "displaytype");
  803. //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
  804. if(nRow == 0 && nSize == 0) {
  805. if(nColSpan == 1) {
  806. //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
  807. objGridTemp.deleteContentsCol("body", nCol, false);
  808. } else {
  809. for(var j=(nCol+nColSpan-1);j>=nCol;j--)
  810. {
  811. //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
  812. objGridTemp.deleteContentsCol("body", j, false);
  813. }
  814. }
  815. }
  816. }
  817. }
  818. //3. 체크박스 제거(0번째 칼럼)
  819. objGridTemp.deleteContentsCol(0);
  820. //objGridTemp.deleteContentsCol("body", 0,false);
  821. //4. Dataset동적 바인딩.
  822. objGridTemp.binddataset = objGrid.binddataset;
  823. //5. 그리드 visible: false, show()
  824. objGridTemp.visible = false;
  825. objGridTemp.show();
  826. objExport.activepagename = aSheet[i];
  827. objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, aSheet[i] + "!A1");
  828. }
  829. else
  830. {
  831. // Grid원본 export
  832. //1. 탬프그리드 생성.
  833. var objGridTemp = new Grid("grd_temp"+String(grdCnt), 0, 100, 100, 200);
  834. this.addChild("grd_temp"+String(grdCnt), objGridTemp);
  835. grdCnt++;
  836. //2. 원본 그리드 포맷 카피.
  837. //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
  838. var fomat = '<Formats>';
  839. fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
  840. fomat += '</Formats>';
  841. objGridTemp.formats = fomat;
  842. // 칼럼사이즈 처리
  843. //trace("ColCount::"+objNewGrid.getCellCount("body"));
  844. for(var ii=0;ii<objGridTemp.getCellCount("body");ii++)
  845. {
  846. var nRow = objGrid.getCellProperty("body", ii, "row");
  847. if(nRow == 0) {
  848. var norgColSize = objGrid.getRealColSize(ii);
  849. objGridTemp.setFormatColProperty(ii,"size", norgColSize);
  850. }
  851. }
  852. //size 0 제거
  853. if(bRemove == false){
  854. for(var removeRow=(objGrid.getCellCount("Head")-1);removeRow>=0;removeRow--)
  855. {
  856. var nRow = objGrid.getCellProperty("Head", removeRow, "row");
  857. var nCol = objGrid.getCellProperty("Head", removeRow, "col");
  858. var nColSpan = objGrid.getCellProperty("Head", removeRow, "colspan");
  859. var nSize = objGrid.getRealColSize(nCol);
  860. var sTitleText = objGrid.getCellProperty("head", removeRow, "text");
  861. var sColType = objGrid.getCellProperty("head", removeRow, "displaytype");
  862. //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
  863. if(nRow == 0 && nSize == 0) {
  864. if(nColSpan == 1) {
  865. //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
  866. objGridTemp.deleteContentsCol("body", nCol, false);
  867. } else {
  868. for(var j=(nCol+nColSpan-1);j>=nCol;j--)
  869. {
  870. //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
  871. objGridTemp.deleteContentsCol("body", j, false);
  872. }
  873. }
  874. }
  875. }
  876. }
  877. //4. Dataset동적 바인딩.
  878. objGridTemp.binddataset = objGrid.binddataset;
  879. //5. 그리드 visible: false, show()
  880. objGridTemp.visible = false;
  881. objGridTemp.show();
  882. objExport.activepagename = aSheet[i];
  883. objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, aSheet[i] + "!A1");
  884. }
  885. }
  886. objExport.exportmessageprocess = "%d 항목을 출력중입니다. %d/%d";
  887. objExport.exporteventtype = "itemrecord";
  888. objExport.exportuitype = "exportprogress";
  889. objExport.export();
  890. objExport = null;
  891. //if(bTemp){
  892. //trace(grdCnt);
  893. if(grdCnt>0){
  894. for(var i=0; i<grdCnt; i++){
  895. //6. temp그리드 삭제.
  896. var objGridTemp2 = eval("grd_temp"+String(i));
  897. this.removeChild("grd_temp"+String(i));
  898. objGridTemp2.destroy();
  899. objGridTemp2 = null;
  900. }
  901. }else{
  902. //6. temp그리드 삭제.
  903. var objGridTemp2 = eval("grd_temp0");
  904. this.removeChild("grd_temp0");
  905. objGridTemp2.destroy();
  906. objGridTemp2 = null;
  907. }
  908. //}
  909. var exeFileNM;
  910. if (bSave)
  911. {
  912. // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
  913. var objExtCommon = new ExtCommon();
  914. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  915. var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
  916. var newFilePath;
  917. if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
  918. {
  919. newFilePath = sFilePath + strFileName.replace(".xlsx","") + ".xlsx";
  920. }
  921. else
  922. {
  923. var sFile = vFile_down.fullpath;
  924. newFilePath = sFile.replace(".xlsx","") + ".xlsx";
  925. }
  926. //trace(preFilePath +"::" +newFilePath);
  927. if(preFilePath == newFilePath) {
  928. exeFileNM = preFilePath;
  929. } else {
  930. if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
  931. var rtn = objExtCommon.MoveFile(preFilePath, newFilePath, false);
  932. exeFileNM = newFilePath;
  933. }
  934. }else{
  935. var objExtCommon = new ExtCommon();
  936. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  937. var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
  938. exeFileNM = preFilePath;
  939. }
  940. if(sfileOpen == "OPEN"){
  941. //EXCEL에서 열기
  942. objExtCommon.executeProcess(exeFileNM, "","");
  943. }else if(sfileOpen == "USER"){
  944. var bOK;
  945. bOK = confirm( "확인", "엑셀을 열어보시겠습니까?", "question");
  946. if(bOK){
  947. objExtCommon.executeProcess(exeFileNM, "","");
  948. }
  949. }
  950. }
  951. /************************************************************************************************
  952. * 함수명 : grdf_OnExport (삭제 예정)
  953. * 설명 : Exprting Progressbar
  954. * argument : obj ExportObject
  955. e Event
  956. * return Type : none
  957. * 작성자 : tobesoft
  958. ************************************************************************************************/
  959. // function grdf_OnExport(obj:ExportObject, e:ExportEventInfo)
  960. // {
  961. // //obj.exportmessageprocess = "%d Item is exprting %d/%d";
  962. // }
  963. /************************************************************************************************
  964. * 함수명 : grdf_exportCsv
  965. * 설명 : Export Grid to CSV
  966. * argument : objGrid Grid Object
  967. sFileName File Name
  968. sFilePath file path
  969. sfileOpen String FileOpen (default:none) (open:엑셀오픈, none:엑셀오픈안함, user:엑셀오픈여부선택)
  970. * return Type : none
  971. * 작성자 : tobesoft
  972. ************************************************************************************************/
  973. function grdf_exportCsv(objGrid, sFileName, sFilePath, sfileOpen)
  974. {
  975. var strValue = "";
  976. var objDs = eval(objGrid.binddataset);
  977. if(utlf_isNull(sFileName)){
  978. sFileName = objGrid.name + "_temp";
  979. }
  980. //fileopen 여부
  981. if(utlf_isNull(sfileOpen)){
  982. sfileOpen = "none";
  983. }else{
  984. sfileOpen = String(sfileOpen).toUpperCase();
  985. }
  986. var strFileName = sFileName+".csv";
  987. // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
  988. if (utlf_isNull(sFilePath))
  989. {
  990. var fd = new FileDialog();
  991. var vFile_down = fd.open("Excel Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
  992. if (utlf_isNull(vFile_down))
  993. {
  994. return;
  995. }
  996. strFileName = vFile_down.fullpath;
  997. var newFilePath;
  998. }else{
  999. // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
  1000. var objExtCommon = new ExtCommon();
  1001. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  1002. strFileName = userHomeDir + strFileName.replace(".csv","") + ".csv";
  1003. var newFilePath;
  1004. }
  1005. //쉼표로 구분자를 준 CSV 형식의 그리드 데이터
  1006. strValue = objGrid.getCsvData();
  1007. var vfile = new VirtualFile();
  1008. var to_day = new Date();
  1009. //var sNewFileName = sFileName+".csv";
  1010. vfile.open(strFileName, VirtualFile.openWrite | VirtualFile.openText);
  1011. vfile.write(strValue, "urf-8");
  1012. var path = vfile.fullpath;
  1013. vfile.close();
  1014. vfile = null;
  1015. if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
  1016. {
  1017. newFilePath = sFilePath + sFileName.replace(".csv","") + ".csv";
  1018. var rtn = objExtCommon.MoveFile(path, newFilePath, false);
  1019. exeFileNM = newFilePath;
  1020. path = newFilePath;
  1021. }
  1022. var objExtCommon = new ExtCommon();
  1023. var exeExcelPath = objExtCommon.regGetValue("HKEY_CLASSES_ROOT", "CLSID\\{00020820-0000-0000-C000-000000000046}\\LocalServer32\\", "", "S");
  1024. //exeExcelPath : excel exe path
  1025. var arrExcelPath = exeExcelPath.split("\\");
  1026. exeFileNM = arrExcelPath[arrExcelPath.length-1];
  1027. if(sfileOpen == "OPEN"){
  1028. //EXCEL에서 열기
  1029. objExtCommon.executeProcess(exeFileNM, "\"" + path + "\"", exeExcelPath.replace(exeFileNM,""));
  1030. }else if(sfileOpen == "USER"){
  1031. var bOK;
  1032. bOK = confirm( "확인", "엑셀을 열어보시겠습니까?", "question");
  1033. if(bOK){
  1034. objExtCommon.executeProcess(exeFileNM, "\"" + path + "\"", exeExcelPath.replace(exeFileNM,""));
  1035. }
  1036. }
  1037. }
  1038. /************************************************************************************************
  1039. * 함수명 : grdf_exportTxt
  1040. * 설명 : Export Grid to TXT
  1041. * argument : objGrid Grid Object
  1042. sFileName File Name
  1043. * return Type : none
  1044. * 작성자 : tobesoft
  1045. ************************************************************************************************/
  1046. function grdf_exportTxt(objGrid, sFileName, sFilePath, sfileOpen)
  1047. {
  1048. var strValue = "";
  1049. var objDs = eval(objGrid.binddataset);
  1050. //fileopen 여부
  1051. if(utlf_isNull(sfileOpen)){
  1052. sfileOpen = "none";
  1053. }else{
  1054. sfileOpen = String(sfileOpen).toUpperCase();
  1055. }
  1056. var strFileName = sFileName+".txt";
  1057. var newFilePath;
  1058. var preFilePath;
  1059. var objExtCommon = new ExtCommon();
  1060. // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
  1061. if (utlf_isNull(sFilePath))
  1062. {
  1063. var fd = new FileDialog();
  1064. var vFile_down = fd.open("Txt Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
  1065. if (utlf_isNull(vFile_down))
  1066. {
  1067. return;
  1068. }
  1069. strFileName = vFile_down.fullpath;
  1070. }else{
  1071. // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
  1072. var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  1073. strFileName = userHomeDir + strFileName.replace(".txt","") + ".txt";
  1074. preFilePath = strFileName;
  1075. }
  1076. //쉼표로 구분자를 준 TXT 형식의 그리드 데이터
  1077. strValue = objGrid.getCsvData();
  1078. var vfile = new VirtualFile();
  1079. var to_day = new Date();
  1080. var sTxt;
  1081. sTxt = strValue.replace(String.fromCharCode(10),",'"+"\r\n");
  1082. sTxt = sTxt.replace('"','');
  1083. vfile.open(strFileName, VirtualFile.openWrite | VirtualFile.openText);
  1084. var bSuccess2 = vfile.write(sTxt, "utf-8");
  1085. var bSuccess3 = vfile.close();
  1086. var path = vfile.fullpath;
  1087. vfile.close();
  1088. vfile = null;
  1089. var exeFileNM;
  1090. if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
  1091. {
  1092. newFilePath = sFilePath + sFileName.replace(".txt","") + ".txt";
  1093. if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
  1094. var rtn = objExtCommon.MoveFile(preFilePath, newFilePath, false);
  1095. exeFileNM = newFilePath;
  1096. }else{
  1097. // var objExtCommon = new ExtCommon();
  1098. // var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
  1099. // var preFilePath = userHomeDir + strFileName.replace(".txt","") + ".txt";
  1100. exeFileNM = strFileName;
  1101. }
  1102. if(sfileOpen == "OPEN"){
  1103. objExtCommon.executeProcess(exeFileNM, "","");
  1104. }else if(sfileOpen == "USER"){
  1105. var bOK;
  1106. bOK = confirm( "확인", "TXT파일을 열어보시겠습니까?", "question");
  1107. if(bOK){
  1108. objExtCommon.executeProcess(exeFileNM, "","");
  1109. }
  1110. }
  1111. }
  1112. /************************************************************************************************
  1113. * 함수명 : grdf_ImportExcel
  1114. * 설명 : Import Excel to Grid
  1115. * argument : sDsName Dataset Name
  1116. nStartRow Import start Row
  1117. objGrd Grid Object
  1118. objGrd가 있으면 그리드를 기준으로 그리드에 보이는 셀과 binding된column에만 데이터가 들어감
  1119. nStartCol 그리드를 기준의 col index default 1
  1120. bDsClear 업로드하는 그리드 clear여부
  1121. * return Type : none
  1122. * 작성자 : tobesoft
  1123. ************************************************************************************************/
  1124. function grdf_ImportExcel(sDsName, nStartRow, objGrd, nStartCol, bDsClear)
  1125. {
  1126. var fd = new FileDialog;
  1127. var objExt = new ExtCommon();
  1128. var file = fd.open("open", FileDialog.LOAD,"%MYDOCUMENT%");
  1129. var lv_oDs;
  1130. var lv_sDsNm = "ds_importExcel";
  1131. var lv_Ret;
  1132. var objDsImport = eval(sDsName);
  1133. if( !utlf_isNull(bDsClear) && bDsClear == true ){
  1134. objDsImport.clearData();
  1135. }
  1136. var lv_nStRow = 0;
  1137. if(file != undefined){
  1138. file.open(VirtualFile.openRead | VirtualFile.openBinary);
  1139. file.close();
  1140. }else{
  1141. return false;
  1142. }
  1143. try{
  1144. lv_oDs = this.all[lv_sDsNm];
  1145. }catch(e){}
  1146. if(utlf_isNull(nStartCol))
  1147. {
  1148. nStartCol = 0;
  1149. }
  1150. if(utlf_isNull(lv_oDs))
  1151. {
  1152. lv_oDs = new Dataset;
  1153. lv_oDs.name = lv_sDsNm;
  1154. this.addChild(lv_sDsNm,lv_oDs);
  1155. }
  1156. if(lv_oDs.rowcount > 0) lv_oDs.clear();
  1157. if (objDsImport == null || objDsImport == undefined) return false;
  1158. if (nStartRow == null || nStartRow == 0) nStartRow = 1;
  1159. objExt.excelImportByIndex(file.fullpath, 0, lv_sDsNm, false, 1, 0, nStartRow);
  1160. lv_nStRow = objDsImport.rowcount;
  1161. var nRow;
  1162. var k;
  1163. if(utlf_isNull(objGrd))
  1164. {
  1165. for(var i=0; i < lv_oDs.getRowCount() ; i++ )
  1166. {
  1167. nRow = objDsImport.addRow();
  1168. k=0;
  1169. for(var j = 0; j <lv_oDs.getColCount(); j++)
  1170. {
  1171. objDsImport.setColumn(nRow, j, lv_oDs.getColumn(i,j));
  1172. k++;
  1173. }
  1174. }
  1175. }
  1176. else
  1177. {
  1178. var nCellCnt = objGrd.getCellCount("Body");
  1179. var sCellProp;
  1180. var sCmbDs;
  1181. var sBindCd;
  1182. var sBindNm;
  1183. for(var i=0; i < lv_oDs.getRowCount() ; i++ )
  1184. {
  1185. nRow = objDsImport.addRow();
  1186. k = nStartCol;
  1187. for(var j = nStartCol; j < nCellCnt; j++)
  1188. {
  1189. sCellProp = objGrd.getCellProperty("body", j, "text");
  1190. if(!utlf_isNull(sCellProp)){
  1191. var arrCellProp = sCellProp.split(":");
  1192. if(arrCellProp[0] == "bind")
  1193. {
  1194. //combo일경우 맵핑 되어 있는 값을 넣도록 수정
  1195. if(objGrd.getCellProperty("body", j, "displaytype") == "combo")
  1196. {
  1197. sCmbDs = objGrd.getCellProperty("body", j, "combodataset");
  1198. sBindCd = objGrd.getCellProperty("body", j, "combocodecol");
  1199. sBindNm = objGrd.getCellProperty("body", j, "combodatacol");
  1200. var value = eval("this.objects[sCmbDs].lookup(sBindNm, lv_oDs.getColumn(i,k), sBindCd)");
  1201. objDsImport.setColumn(nRow, arrCellProp[1], value);
  1202. } else {
  1203. objDsImport.setColumn(nRow, arrCellProp[1], lv_oDs.getColumn(i,k));
  1204. }
  1205. k++;
  1206. }
  1207. }
  1208. }
  1209. }
  1210. }
  1211. }
  1212. /**********************************************************************************
  1213. * 함수명 : grdf_setColumn
  1214. * 설명 : 그리드 컬럼 추가 / 제거
  1215. * argument : Object objGrd - 그리드 오브젝트
  1216. String sStatus - "I" / "D" ( I 추가, D 삭제)
  1217. Number insertColIndex - insert 할 Column Index
  1218. String colID - Column ID(추가시 필요한 인자)
  1219. String sTitle - 헤더에 나올 텍스트(추가시 필요한 인자)
  1220. String sDisplay - 그리드의 cell의 displaytype (추가시 필요한 인자)
  1221. String sEdit - 그리드의 cell의 eidttype (추가시 필요한 인자)
  1222. * return Type : none
  1223. * 작성자 : tobesoft
  1224. **********************************************************************************/
  1225. function grdf_setColumn(objGrd, sStatus, insertColIndex, colID, sTitle, sDisplay, sEdit )
  1226. {
  1227. if(sStatus == "I")
  1228. {
  1229. objGrd.insertContentsCol("body", insertColIndex);
  1230. objGrd.setCellProperty("Head", insertColIndex, "text", sTitle);
  1231. objGrd.setCellProperty("body", insertColIndex, "text", "bind:"+colID);
  1232. //objGrd.setCellProperty("body", insertColIndex, "text", "bind:"+colID);
  1233. objGrd.setCellProperty("body", insertColIndex, "displaytype", sDisplay);
  1234. objGrd.setCellProperty("body", insertColIndex, "displaytype", sEdit);
  1235. }
  1236. else
  1237. {
  1238. objGrd.deleteContentsCol(insertColIndex);
  1239. }
  1240. }
  1241. /************************************************************************************************
  1242. * 함수명 : grdf_setStatus
  1243. * 인자 : Object objGrd - 그리드 오브젝트
  1244. * String sStatus - 상태번호 (추가 : I, 수정 : U, 삭제 :D, 초기상태 : "")
  1245. * Array arrRow - Array Row Index
  1246. * 결과값 :
  1247. * 함수설명 : 그리드 상태표시 값 변경
  1248. ************************************************************************************************/
  1249. function grdf_setStatus(objGrd, sStatus, arrRow)
  1250. {
  1251. var bindDs = eval(objGrd.binddataset);
  1252. var updatecontrol = bindDs.updatecontrol;
  1253. if(updatecontrol)
  1254. bindDs.updatecontrol = false;
  1255. if(utlf_isNull(arrRow)) {
  1256. for(var i = 0; i < bindDs.rowcount; i++)
  1257. bindDs.setRowType(i, sStatus);
  1258. } else {
  1259. for(var i = 0; i < arrRow.length; i++)
  1260. bindDs.setRowType(arrRow[i], sStatus);
  1261. }
  1262. if(updatecontrol)
  1263. bindDs.updatecontrol = true;
  1264. }
  1265. /**********************************************************************************
  1266. * 함수명 : grdf_valueCheck ( -> frmf_chkMdtGrid )
  1267. * 설명 : 입력된 그리드의 컬럼값 NULL CHECK
  1268. * argument : Object objGrd - 그리드 오브젝트
  1269. * return Type : return true/false
  1270. * 작성자 : tobesoft
  1271. ex) grdf_valueCheck(grid, "col1=타이틀1,col2=타이틀2")
  1272. **********************************************************************************/
  1273. // function grdf_valueCheck(objGrd:Grid, strColid)
  1274. // {
  1275. //
  1276. // var objDS = eval(objGrd.binddataset);
  1277. // var DS_COPY = new Dataset();
  1278. // var objDs = objDS;
  1279. // for(var i=0;i<objDS.getColCount();i++){
  1280. // // 화면에서 넘겨받은 데이터셋의 컬럼수만큼 버퍼 데이터셋에 컬럼생성.
  1281. // DS_COPY.addColumn(objDS.getColID(i),"STRING","120");
  1282. // }
  1283. //
  1284. // var j = 0;
  1285. // var relation = "";
  1286. // for(var i=0; i<objDS.rowcount; i++){
  1287. // // 화면에서 넘겨받은 데이터셋에 항목중 추가, 수정 된것.
  1288. // if(objDS.getRowType(i) == "2" || objDS.getRowType(i) == "4"){
  1289. // DS_COPY.addRow();
  1290. // DS_COPY.copyRow(j,objDS,i);
  1291. // relation = relation + i + ":" + j + ",";
  1292. // j++;
  1293. // }
  1294. // }
  1295. //
  1296. // var objDS2 = DS_COPY;
  1297. // var arrayRelation = relation.split(",");
  1298. // var objArr1 = strColid.split(",");
  1299. // var sTrimValue;
  1300. // // 그리드에 존재하는 Row값만큼
  1301. // for(var i=0; i<objDS2.getRowCount(); i++){
  1302. // // 해당 폼에서 넘겨받은 strColid값의 갯수만큼
  1303. // for(var j=0; j<objArr1.length; j++){
  1304. // // Column ID와 Text값을분할
  1305. // var objArr2 = objArr1[j].split("=");
  1306. // for(var k=0; k<objDS2.getColCount(); k++){
  1307. // if(objDS2.getColID(k) == objArr2[0]){
  1308. // sTrimValue=objDS2.getColumn(i, k);
  1309. // if(!utlf_isNull(sTrimValue))
  1310. // {
  1311. // sTrimValue=sTrimValue.trim();
  1312. // }
  1313. // if(utlf_isNull(sTrimValue)){
  1314. // for(var l=0; l<arrayRelation.length; l++){
  1315. // var arrRelation2 = arrayRelation[l].split(":");
  1316. // if(i == arrRelation2[1]){
  1317. // sysf_messageBox(objArr2[1] + "은(는)","I003");
  1318. // // 값이 Null인 Cell에 focus.
  1319. // objDs.rowposition = arrRelation2[0];
  1320. // var nCellIdx = objGrd.getBindCellIndex("body", objArr2[0]);
  1321. // objGrd.setCellPos(nCellIdx);
  1322. // objGrd.showEditor(true);
  1323. // return false;
  1324. // }
  1325. // }
  1326. // }
  1327. // }
  1328. // }
  1329. // }
  1330. // }
  1331. // return true;
  1332. // }
  1333. /**********************************************************************************
  1334. * 함수명 : grdf_sortNodeList()
  1335. * 설명 : 오름차순 내림차순 mode
  1336. * argument : Object objDs - dataset
  1337. String colID - Column ID
  1338. String mode - 오른차순 내림차순 mode ("asc", "desc")
  1339. * return Type : none
  1340. * 작성자 : tobesoft
  1341. **********************************************************************************/
  1342. function grdf_sortNodeList( objDs, colID, mode ) {
  1343. if(objDs.getRowCount() == 0) return;
  1344. var sMode = "+";
  1345. if(mode == "desc") sMode = "-";
  1346. // keystring 설정 전 초기화
  1347. objDs.keystring = "";
  1348. objDs.keystring = "S:"+sMode+colID;
  1349. }
  1350. /**********************************************************************************
  1351. * 함수명 : grdf_initGrid()
  1352. * 설명 : 그리드의 sort기능과 전체체크기능을 세텡한다.
  1353. * argument : Object obj - grid object
  1354. * isTF - "1.0" 파라미터를 넘겨주면 TF와 동일한 동작으로 sort 한다
  1355. * return Type : none
  1356. * 작성자 : tobesoft
  1357. **********************************************************************************/
  1358. function grdf_initGrid(obj, isTF)
  1359. {
  1360. var lv_nCellCnt = obj.getCellCount("Head");
  1361. var lv_sCellText = "";
  1362. var lv_nChkCnt = 0;
  1363. var lv_sDpType = "";
  1364. if(isTF == "1.0") obj.tfmode = "Y";
  1365. for(var i=0; i<lv_nCellCnt; i++)
  1366. {
  1367. lv_sCellText = obj.getCellText(-1,i);
  1368. lv_sDpType = obj.getCellProperty("Head", i,"displaytype");
  1369. if(lv_sDpType == "checkbox")
  1370. {
  1371. lv_sDpType = obj.setCellProperty("Head", i,"text","expr:0");
  1372. lv_nChkCnt++;
  1373. }
  1374. }
  1375. if(lv_nChkCnt > 0) obj.onheadclick.addHandler(grdf_setEventGrid);
  1376. obj.onheadclick.addHandler(grdf_setEventGrid);
  1377. }
  1378. /**********************************************************************************
  1379. * 함수명 : grdf_setEventGrid()
  1380. * 설명 : 그리드의 sort기능과 전체체크 이벤트중 checkbox이면 전체 체크이벤트로 아니면 sort 이벤트로 분기한다.
  1381. * argument : Object obj - grid object
  1382. Object e - GridClickEventInfo object
  1383. * return Type : none
  1384. * 작성자 : tobesoft
  1385. **********************************************************************************/
  1386. function grdf_setEventGrid(obj:Grid, e:GridClickEventInfo)
  1387. {
  1388. if(e.row == -2) return;
  1389. var v_strType=obj.getCellProperty("head",e.cell,"edittype");
  1390. if(utlf_isNull(v_strType)) v_strType="none";
  1391. var BodyColId = (obj.getCellProperty("body", e.col,"text")).toString().split(":"); // e.col : 바인드된 컬럼.
  1392. var vCheckMergeCheck = false;
  1393. if (BodyColId[0] == "bind") {
  1394. //return false;
  1395. var grdCellIdx = obj.getBindCellIndex("body",BodyColId[1]);
  1396. var edittype = utlf_transNullToEmpty(obj.getCellProperty("body", grdCellIdx, "edittype"));
  1397. if(edittype == "checkbox" || edittype.indexOf("checkbox") >-1) vCheckMergeCheck = true;
  1398. }
  1399. if((v_strType == "checkbox" || v_strType.indexOf("checkbox") >-1) && vCheckMergeCheck) //전체 체크
  1400. {
  1401. grdf_setGridCheckAll(obj, e);
  1402. }
  1403. else
  1404. {
  1405. if(obj.getCellProperty("head",e.cell,"displaytype") == "checkbox") return; // 헤더의 display가 checkbox 이면 리턴
  1406. var nCol = obj.getCellProperty("head",e.cell, "col");
  1407. if(obj.getCellProperty("body",nCol,"text") == null) return; // 컬럼정보가 없으면 리턴
  1408. if(obj.getCellProperty("body",nCol,"text").indexOf("bind") < 0) return; // 바인드 정보가 아니면 리턴
  1409. grdf_gridSort(obj, e);
  1410. }
  1411. }
  1412. /**********************************************************************************
  1413. * 함수명 : grdf_setGridSort()
  1414. * 설명 : Grid Sort기능 이벤트 추가
  1415. * argument : Object obj - Grid Ojbect
  1416. * return Type : none
  1417. * 작성자 : tobesoft
  1418. **********************************************************************************/
  1419. function grdf_setGridSort(obj)
  1420. {
  1421. //헤더 클릭시 그리드 소트 적용
  1422. obj.onheadclick.addHandler(grdf_gridSort);
  1423. //obj.onheadclick.addHandler(grdf_setEventGrid);
  1424. }
  1425. /**********************************************************************************
  1426. * 함수명 : grdf_gridSort()
  1427. * 설명 : Grid Sort
  1428. * argument : Object obj - Grid Ojbect
  1429. Object e - event Ojbect
  1430. * return Type : none
  1431. * 작성자 : tobesoft
  1432. **********************************************************************************/
  1433. var CONST_ASC_MARK = "▲";
  1434. var CONST_DESC_MARK = "▼";
  1435. function grdf_gridSort(obj:Grid, e:GridClickEventInfo)
  1436. {
  1437. var bindDs = eval(obj.binddataset);
  1438. if (bindDs.rowcount == 0) return false;
  1439. var CONST_SORT_MARK = "";
  1440. // 클릭한 위치 그 앞에까지 존재하는 서브셀의 갯수 만큼 e.cell 에 더 해주면 body 영역의 col 위치 값이 나올듯?
  1441. var colspanHeadCnt = 0;
  1442. var colspanBodyCnt = 0;
  1443. var headCnt = 0;
  1444. var bodyCnt = 0;
  1445. for(var i = 0; i <= e.cell; i++) {
  1446. headCnt = obj.getCellProperty("Head", i, "colspan");
  1447. bodyCnt = obj.getCellProperty("body", i, "colspan");
  1448. colspanHeadCnt += headCnt;
  1449. colspanBodyCnt += bodyCnt;
  1450. }
  1451. var colspanCnt = colspanHeadCnt - colspanBodyCnt;
  1452. // 선택한 컬럼의 head가 합쳐져 있고 body는 안합쳐져 있을 때는 body의 제일 앞 컬럼 기준으로 sort 하도록 수정
  1453. if(headCnt > 1 && bodyCnt == 1) {
  1454. colspanCnt = colspanCnt - headCnt + 1;
  1455. }
  1456. var sText = obj.getCellProperty("body", e.cell + colspanCnt, "text");
  1457. if(utlf_isNull(sText)) return false;
  1458. var BodyColId = sText.split(":"); // e.col : 바인드된 컬럼.
  1459. if (BodyColId[0] != "bind") {
  1460. return false;
  1461. }
  1462. //for (var i = 0; i < obj.getCellCount("head"); i++) {
  1463. if(obj.getCellText(-1, e.cell) == "undefined")
  1464. return;
  1465. //continue;
  1466. var strHeadText = obj.getCellText(-1, e.cell);
  1467. // tfmode 일때는 TF와 동일하게 두 개 컬럼까지만 연속 정렬되고 세개째부터는 다시 한개만 정렬되도록 함
  1468. if(obj.tfmode == "Y") {
  1469. var sameCnt = 0;
  1470. for (var i = 0; i < obj.getCellCount("head"); i++) {
  1471. if(i == e.cell) continue;
  1472. var tempStrHeadText = obj.getCellText(-1, i);
  1473. var status = tempStrHeadText.substr(tempStrHeadText.length - 1);
  1474. if(status == CONST_DESC_MARK || status == CONST_ASC_MARK)
  1475. {
  1476. if(++sameCnt > 1) { // 기존에 2개가 있다면 초기화 하고 다시 한개만
  1477. //초기화
  1478. grdf_clearSort(obj);
  1479. }
  1480. }
  1481. }
  1482. }
  1483. //if(i == e.cell) {
  1484. var keystring = bindDs.keystring;
  1485. var sortcolumns = "";
  1486. if(!utlf_isNull(keystring)) {
  1487. keystring = keystring.toString();
  1488. var isGroup = keystring.indexOf("G:");
  1489. if(isGroup > -1) return;
  1490. keystring = keystring.replace(/undefined/g, "");
  1491. if(keystring != "S:") {
  1492. var nStart = keystring.indexOf("S:");
  1493. sortcolumns = keystring.substring(nStart + 2, keystring.length);
  1494. var nS = sortcolumns.indexOf(BodyColId[1]); // keystring에 이미 들어가 있는 컬럼이면 먼저 제거 해준다.
  1495. if( nS > -1) {
  1496. //sysf_trace("1 : " + sortcolumns + ", " + sortcolumns.substring(0, nS) + ", " + sortcolumns.substring(nS, sortcolumns.length));
  1497. sortcolumns = sortcolumns.substring(0, nS - 1) + sortcolumns.substring(nS, sortcolumns.length); // '+', '-' 제거
  1498. sortcolumns = sortcolumns.replace(BodyColId[1], ""); // 기존에 있는 컬럼명 제거
  1499. }
  1500. }
  1501. }
  1502. if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK) {
  1503. obj.setCellProperty( "head", e.cell, "text", strHeadText.substr(0, strHeadText.length - 2) + " " + CONST_DESC_MARK);
  1504. bindDs.keystring = "S:" + "-" + BodyColId[1] + sortcolumns;
  1505. } else if (strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK) {
  1506. obj.setCellProperty( "head", e.cell, "text", strHeadText.substr(0, strHeadText.length - 2));
  1507. bindDs.keystring = "S:" + sortcolumns;
  1508. } else {
  1509. obj.setCellProperty( "head", e.cell, "text", strHeadText + " " + CONST_ASC_MARK);
  1510. bindDs.keystring = "S:" + "+" + BodyColId[1] + sortcolumns;
  1511. }
  1512. //}
  1513. //}
  1514. }
  1515. /**********************************************************************************
  1516. * 함수명 : grdf_clearSort()
  1517. * 설명 : Grid Sort clear
  1518. * argument : Object obj - Grid Ojbect
  1519. * return Type : none
  1520. * 작성자 : tobesoft
  1521. **********************************************************************************/
  1522. function grdf_clearSort(obj:Grid)
  1523. {
  1524. var bindDs = eval(obj.binddataset);
  1525. bindDs.keystring = "";
  1526. for (var i = 0; i < obj.getCellCount("head"); i++)
  1527. {
  1528. if(obj.getCellText(-1, i) == "undefined") continue;
  1529. var strHeadText = obj.getCellText(-1, i);
  1530. if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK || strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK)
  1531. {
  1532. obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2));
  1533. }
  1534. }
  1535. }
  1536. /**********************************************************************************
  1537. * 함수명 : grdf_setRowTypeIcon()
  1538. * 설명 : 그리드 상태 아이콘 보여주기
  1539. * argument : Object objGrd - Grid Ojbect
  1540. String colIndex - Grid body col Index
  1541. * return Type : none
  1542. * 작성자 : tobesoft
  1543. **********************************************************************************/
  1544. function grdf_setRowTypeIcon(objGrd, colIndex)
  1545. {
  1546. var sExprText = "expr:getRowType(currow) == 2 ?'IMG::com/ico_i.png' : (getRowType(currow) == 4 ? 'IMG::com/ico_u.png' : (getRowType(currow) == 8 ? 'IMG::com/ico_d.png' : 'IMG::com/ico_e.png'))";
  1547. objGrd.setCellProperty("Body", colIndex, "displaytype", "image");
  1548. objGrd.setCellProperty("Body", colIndex, "edittype", "none");
  1549. objGrd.setCellProperty("Body", colIndex, "align", "center middle");
  1550. objGrd.setCellProperty("Body", colIndex, "expr", sExprText);
  1551. }
  1552. var CONST_SEPARATOR = " "; //컬럼별 구분자
  1553. var iv_sClipboard;
  1554. /**********************************************************************************
  1555. * 함수명 : grdf_clipboardCopy()
  1556. * 설명 : 그리드 선택 영역을 클립보드에 복사하기
  1557. * argument : Object objGrd - Grid Ojbect
  1558. * : bizFlag - AST, EMR, etc...
  1559. * return Type : none
  1560. * 작성자 : tobesoft
  1561. **********************************************************************************/
  1562. function grdf_clipboardCopy(objGrd, bizFlag) {
  1563. var lv_oBindDs = eval(objGrd.binddataset);
  1564. var lv_sColID;
  1565. var lv_sVal;
  1566. var lv_sClipboard = "";
  1567. var lv_nAreaStartRow;
  1568. var lv_nAreaEndRow;
  1569. var lv_nAreaStartCol;
  1570. var lv_nAreaEndCol;
  1571. if(objGrd.selecttype == "multiarea") {
  1572. lv_nAreaStartRow = parseInt(objGrd.selectstartrow);
  1573. lv_nAreaEndRow = parseInt(objGrd.selectendrow);
  1574. lv_nAreaStartCol = parseInt(objGrd.selectstartcol);
  1575. lv_nAreaEndCol = parseInt(objGrd.selectendcol);
  1576. } else if(objGrd.selecttype == "multirow") {
  1577. lv_nAreaStartRow = parseInt(objGrd.selectstartrow) ;
  1578. lv_nAreaEndRow = parseInt(objGrd.selectendrow);
  1579. lv_nAreaStartCol = 0;
  1580. lv_nAreaEndCol = objGrd.getCellCount("body") - 1;
  1581. } else {
  1582. lv_nAreaStartRow = 0 ;
  1583. lv_nAreaEndRow = lv_oBindDs.getRowCount() - 1;
  1584. lv_nAreaStartCol = 0;
  1585. lv_nAreaEndCol = objGrd.getCellCount("body") - 1;
  1586. }
  1587. if( bizFlag == "AST" ){
  1588. lv_sClipboard = String.fromCharCode(10);
  1589. }
  1590. for(var nRow = lv_nAreaStartRow; nRow <= lv_nAreaEndRow; nRow++)
  1591. {
  1592. for(var nCell = lv_nAreaStartCol; nCell <= lv_nAreaEndCol; nCell++)
  1593. {
  1594. lv_sColID = objGrd.getCellProperty("body",nCell,"text");
  1595. lv_sVal = objGrd.getCellValue(nRow,nCell);
  1596. lv_sClipboard = lv_sClipboard + lv_sVal + CONST_SEPARATOR;
  1597. }
  1598. lv_sClipboard = lv_sClipboard.substr(0,lv_sClipboard.length-1);
  1599. lv_sClipboard = lv_sClipboard +String.fromCharCode(10);
  1600. }
  1601. lv_sClipboard = lv_sClipboard.substr(0,lv_sClipboard.length-1);
  1602. iv_sClipboard = lv_sClipboard;
  1603. system.setClipboard("CF_TEXT",lv_sClipboard);
  1604. return;
  1605. }
  1606. /**********************************************************************************
  1607. * 함수명 : grdf_clipboardPaste()
  1608. * 설명 : 그리드 선택 영역에 붙여넣기
  1609. * argument : Object objGrd - Grid Ojbect
  1610. * return Type : none
  1611. * 작성자 : tobesoft
  1612. **********************************************************************************/
  1613. function grdf_clipboardPaste(objGrd) {
  1614. var lv_oBindDs = eval(objGrd.binddataset);
  1615. var lv_sClipboardType = "";
  1616. var lv_nSearchRow = 0;
  1617. var lv_nSearchCol = 0;
  1618. var lv_sColID;
  1619. var lv_sVal;
  1620. var lv_sBgColor;
  1621. var lv_sClipboardData = system.getClipboard("CF_TEXT").replace(",","");
  1622. if(lv_sClipboardData!=iv_sClipboard) lv_sClipboardType = "EXCEL";
  1623. var lv_sClipboardRecord = lv_sClipboardData.split("\n");
  1624. var lv_sClipboardColunm;
  1625. var lv_nAreaStartRow;
  1626. var lv_nAreaEndRow;
  1627. var lv_nAreaStartCol;
  1628. var lv_nAreaEndCol;
  1629. if(objGrd.selecttype == "multiarea")
  1630. {
  1631. lv_nAreaStartRow = objGrd.selectstartrow;
  1632. lv_nAreaEndRow = objGrd.selectendrow;
  1633. lv_nAreaStartCol = objGrd.selectstartcol;
  1634. lv_nAreaEndCol = objGrd.selectendcol;
  1635. }
  1636. else
  1637. {
  1638. lv_nAreaStartRow = 0 ;
  1639. lv_nAreaEndRow = lv_oBindDs.getRowCount() - 1;
  1640. lv_nAreaStartCol = 0;
  1641. lv_nAreaEndCol = lv_oBindDs.getColCount() - 1;
  1642. }
  1643. for(var nRow = lv_nAreaStartRow; nRow < (eval(lv_nAreaStartRow) + eval(lv_sClipboardRecord.length)); nRow++)
  1644. {
  1645. lv_sClipboardColunm = lv_sClipboardRecord[lv_nSearchRow].split(CONST_SEPARATOR);
  1646. lv_nSearchCol = 0;
  1647. var nAreaCell = eval(lv_nAreaStartCol) + eval(lv_sClipboardColunm.length);
  1648. for(var nCell = lv_nAreaStartCol; nCell < nAreaCell && nCell < objGrd.getFormatColCount(); nCell++)
  1649. {
  1650. if(objGrd.getCellProperty("body",nCell,"text") != "undefined" && objGrd.getCellProperty("body",nCell,"text") != null)
  1651. {
  1652. lv_sColID = objGrd.getCellProperty("body",nCell,"text").substr(5);
  1653. }
  1654. lv_sVal = lv_sClipboardColunm[lv_nSearchCol];
  1655. if(lv_sVal != "undefined" )
  1656. {
  1657. //값이 없는데 unicode가 포함된 경우 빈값으로 처리
  1658. if(!utlf_isNull(lv_sVal)){
  1659. var lv_sVal2 = lv_sVal.replace(String.fromCharCode(13),"");
  1660. if(lv_sVal2 == "undefined" ) lv_sVal="";
  1661. }
  1662. //if(lv_sVal == "undefined" ) trace(lv_sColID+":::"+utlf_isNull(utlf_transNullToEmpty(lv_sVal).trim())+"::"+utlf_transNullToEmpty(lv_sVal).trim());
  1663. if(lv_sVal != null &&!(lv_sClipboardType=="EXCEL"&&(nRow+1)==(eval(lv_nAreaStartRow) + eval(lv_sClipboardRecord.length)))){
  1664. lv_oBindDs.setColumn(nRow,lv_sColID,utlf_transNullToEmpty(lv_sVal).trim());
  1665. }
  1666. lv_nSearchCol++;
  1667. }else{
  1668. lv_nSearchCol++;
  1669. }
  1670. nAreaCell++;
  1671. }
  1672. lv_nSearchRow++;
  1673. }
  1674. return;
  1675. }
  1676. /**********************************************************************************
  1677. * 함수명 : grdf_setAllCheck()
  1678. * 설명 : 그리드 전체체크 관련 이벤트 추가 함수
  1679. * argument : Object obj - Grid Ojbect
  1680. * return Type : none
  1681. * 작성자 : tobesoft
  1682. **********************************************************************************/
  1683. function grdf_setAllCheck(obj)
  1684. {
  1685. var lv_nCellCnt = obj.getCellCount("Head");
  1686. var lv_sCellText = "";
  1687. var lv_nChkCnt = 0;
  1688. var lv_sDpType = "";
  1689. for(var i=0; i<lv_nCellCnt; i++)
  1690. {
  1691. lv_sCellText = obj.getCellText(-1,i);
  1692. lv_sDpType = obj.getCellProperty("Head", i,"displaytype");
  1693. if(lv_sDpType == "checkbox")
  1694. {
  1695. lv_sDpType = obj.setCellProperty("Head", i,"text","expr:0");
  1696. lv_nChkCnt++;
  1697. }
  1698. }
  1699. lv_nChkCnt++;
  1700. // trace("lv_nChkCn::t" + lv_nChkCnt);
  1701. if(lv_nChkCnt > 0) obj.onheadclick.addHandler(grdf_setGridCheckAll);
  1702. //if(lv_nChkCnt > 0) obj.onheadclick.addHandler(grdf_setEventGrid);
  1703. }
  1704. /**********************************************************************************
  1705. * 함수명 : grdf_setGridCheckInfo()
  1706. * 설명 : When you click a grid header, cell Index Find
  1707. * argument : Object obj - Grid Object
  1708. Event e - GridClickEventInfo Object
  1709. * return Type : Cell Index
  1710. * 작성자 : tobesoft
  1711. **********************************************************************************/
  1712. function grdf_setGridCheckInfo(obj:Grid, e:GridClickEventInfo)
  1713. {
  1714. for(var i = 0; i < obj.getCellCount("Body"); i++){
  1715. var nCol = obj.getCellProperty("Body", i, "col");
  1716. if(nCol == e.col) return i;
  1717. }
  1718. }
  1719. /**********************************************************************************
  1720. * 함수명 : grdf_setGridCheckAll()
  1721. * 설명 : When you click a grid header, the entire check
  1722. * argument : Object obj - Grid Object
  1723. Event e - GridClickEventInfo Object
  1724. * return Type : none
  1725. * 작성자 : tobesoft
  1726. **********************************************************************************/
  1727. function grdf_setGridCheckAll(obj:Grid, e:GridClickEventInfo)
  1728. {
  1729. var strType;
  1730. var vl_chk;
  1731. var strVal;
  1732. var strChkVal;
  1733. var objDS;
  1734. var nCell = e.cell;
  1735. var nSubCnt = obj.getSubCellCount("head",nCell);
  1736. //var nSubBodyCnt = obj.getSubCellCount("body",nCell);
  1737. var nSubCnt2 = 0;
  1738. var nSubCntTot = 0;
  1739. for(var i=0; i< nCell; i++){
  1740. nSubCnt2 = obj.getSubCellCount("head",i);
  1741. nSubCntTot += nSubCnt2;
  1742. }
  1743. objDS = eval(obj.binddataset);
  1744. if (nSubCnt > 0) { // Case Merge Cell
  1745. var nChkIdx = -1;
  1746. for ( var i = 0; i < nSubCnt; i++)
  1747. {
  1748. strType = obj.getSubCellProperty("head",e.cell,i,"displaytype");
  1749. if(strType == "checkbox") {
  1750. nChkIdx = i;
  1751. break;
  1752. }
  1753. }
  1754. if (nChkIdx == -1)
  1755. return;
  1756. // Head setting
  1757. strVal = obj.getSubCellProperty("head", nCell, nChkIdx, "text");
  1758. if (strVal == "0" || utlf_isNull(strVal)) {
  1759. obj.setSubCellProperty("head",nCell,nChkIdx,"text", '1');
  1760. vl_chk="1";
  1761. } else {
  1762. obj.setSubCellProperty("head",nCell,nChkIdx,"text", '0');
  1763. vl_chk="0";
  1764. }
  1765. } else { // Case not merge
  1766. strType = obj.getCellProperty("head", e.cell, "displaytype");
  1767. if(strType != "checkbox") {
  1768. return;
  1769. }
  1770. // Head setting
  1771. strVal = obj.getCellProperty("head", nCell, "text");
  1772. try{
  1773. strVal = strVal.replace("expr:","");
  1774. }catch(e){};
  1775. if (strVal == "0" || utlf_isNull(strVal)) {
  1776. obj.setCellProperty("head", nCell, "text", '1');
  1777. vl_chk="1";
  1778. } else {
  1779. obj.setCellProperty("head", nCell, "text", '0');
  1780. vl_chk="0";
  1781. }
  1782. }
  1783. grdf_addHeadClickHandler(obj,e,objDS,vl_chk);
  1784. }
  1785. /**********************************************************************************
  1786. * 함수명 : grdf_addHeadClickHandler()
  1787. * 설명 : 전체체크/해제 실적용구현
  1788. * argument : Object obj - Grid
  1789. Event Handler e
  1790. Object objDS - Grid Binddataset
  1791. String vl_chk - 체크뱍스 변경 값
  1792. * return Type : none
  1793. * 작성자 : tobesoft
  1794. **********************************************************************************/
  1795. function grdf_addHeadClickHandler(obj,e, objDS,vl_chk){
  1796. var nCell = grdf_setGridCheckInfo(obj,e);
  1797. var BodyColId = (obj.getCellProperty("body", nCell,"text")).toString().split(":"); // e.col : 바인드된 컬럼.
  1798. if (BodyColId[0] != "bind") {
  1799. return false;
  1800. }
  1801. //objDS.enableevent = false;
  1802. for(var i=0 ; i< objDS.getRowCount(); i++){
  1803. objDS.setColumn(i, BodyColId[1], vl_chk);
  1804. }
  1805. //objDS.enableevent = true;
  1806. }
  1807. /**********************************************************************************
  1808. * 함수명 : grdf_columnSetData()
  1809. * 설명 : chkval 값에 따라 컬럼에 데이터 입력
  1810. * argument : Object objDs - dataset
  1811. Number nRowIndex - row Index
  1812. String sColid - 변경할 컬럼명
  1813. String chkVal - 체크뱍스 변경 값
  1814. String trueVal - 체크 되었을때 입력할 값
  1815. String fasleVal - 체크박스가 체크 해제 되었을대 입력될 값
  1816. * return Type : none
  1817. * 작성자 : tobesoft
  1818. **********************************************************************************/
  1819. function grdf_columnSetData(objDs, nRowIndex, sColid, chkVal, trueVal, falseVal)
  1820. {
  1821. if(chkVal == "1" || chkVal == trueVal)
  1822. {
  1823. objDs.setColumn(nRowIndex, sColid, trueVal);
  1824. }
  1825. else
  1826. {
  1827. objDs.setColumn(nRowIndex, sColid, falseVal);
  1828. }
  1829. }
  1830. /**********************************************************************************
  1831. * 함수명 : grdf_getKeyCols
  1832. * 설명 : 그리드의 cell의 property 속성이 true인 것의 col index array
  1833. * argument : String gridID - 그리드 아이디
  1834. String atttibutezName - 속성(property)
  1835. * return Type : Array arrCols
  1836. * 작성자 : tobesoft
  1837. ex) grdf_getKeyCols("grd01", "editautoselect"); //return array(1,3,6)
  1838. **********************************************************************************/
  1839. function grdf_getKeyCols( gridID, atttibutezName) {
  1840. var gridObj = eval(gridID);
  1841. var gridDs = eval(gridObj.binddataset);
  1842. var arrCols = new Array();
  1843. for(var i=0; i < gridObj.getCellCount("Body"); i++)
  1844. {
  1845. if(gridObj.getCellProperty("Body", i, atttibutezName) == "true")
  1846. {
  1847. arrCols.push(i);
  1848. }
  1849. }
  1850. return arrCols;
  1851. }
  1852. /**********************************************************************************
  1853. * 함수명 : grdf_setToolTipBind
  1854. * 설명 : 그리드의 tooltip을 자동으로 세팅해준다.
  1855. * argument : Object objGrd - 그리드 Component
  1856. * return Type : none
  1857. * 작성자 : tobesoft
  1858. **********************************************************************************/
  1859. function grdf_setToolTipBind(objGrd)
  1860. {
  1861. if(objGrd.toString() != '[object Grid]')
  1862. {
  1863. return application.alert('Grid Component가 없습니다.');
  1864. }
  1865. var nCell = objGrd.getCellCount("Body"); //cell 갯수
  1866. var sTxt = ""; //cell의 text Property
  1867. var sDispType = ""; //cell의 displaytype Property
  1868. var sCmbDs = ""; //cell의 combodataset Property
  1869. var sBindCd = ""; //cell의 combocodecol Property
  1870. var sBindNm = ""; //cell의 combodatacol Property
  1871. for(var i =0; i < nCell ; i++)
  1872. {
  1873. sTxt = objGrd.getCellProperty("Body", i, "text");
  1874. if(utlf_isNull(sTxt)) continue;
  1875. //combo일경우 expr 생성
  1876. if(objGrd.getCellProperty("Body", i, "displaytype") == "combo")
  1877. {
  1878. sCmbDs = objGrd.getCellProperty("body", i, "combodataset");
  1879. sBindCd = objGrd.getCellProperty("body", i, "combocodecol");
  1880. sBindNm = objGrd.getCellProperty("body", i, "combodatacol");
  1881. var arrText = sTxt.split(":");
  1882. sTxt = "expr:"+sCmbDs+".lookup('"+sBindCd+"',"+objGrd.binddataset+".getColumn(currow,'"+arrText[1]+"'),'"+sBindNm+"')";
  1883. }
  1884. objGrd.setCellProperty("Body", i, "tooltiptext", sTxt);
  1885. }
  1886. /*
  1887. for(var i =0; i < nCell ; i++)
  1888. {
  1889. for(var j =0; j < bindDs.getRowCount(); j++)
  1890. {
  1891. sTxt = objGrd.getCellText(j, i);
  1892. //sTxt = objGrd.getCellProperty("Body", i, "text");
  1893. //trace(i+" : "+sTxt);
  1894. objGrd.setCellProperty("Body", i, "tooltiptext", sTxt);
  1895. }
  1896. }
  1897. */
  1898. objGrd.tooltiptype = "hover";
  1899. }
  1900. /**********************************************************************************
  1901. * 함수명 : grdf_setCellStyle
  1902. * 설명 : 그리드의 Cell Style 지정
  1903. * argument : Object gridID - 그리드 아이디
  1904. String styleFlag - 컬러 인덱스
  1905. String data - 데이터 값
  1906. Srting colRef - 비교할 컬럼 Ref
  1907. String setColRef - 변경할 컬럼 Ref
  1908. String fillflag - 변경할 항목 구분(B: background, F: font)
  1909. * return Type : none
  1910. * 사용예 : grdf_setCellStyle(Grid00,"0^1^2","V^P^D","Column0","Column1","B");
  1911. * 작성자 : tobesoft
  1912. **********************************************************************************/
  1913. function grdf_setCellStyle( gridID , styleFlag , data , colRef , setColRef, fillflag ) {
  1914. var fillStyle = "";
  1915. var style;
  1916. var styleFlags = styleFlag.split("^");
  1917. var datas = data.split("^");
  1918. var setCellIdx = gridID.getBindCellIndex( "body", setColRef);
  1919. if ( fillflag == "B" ) {
  1920. style = new Array("#ffff00", "#ccffcc", "#FF9A00");
  1921. gridID.setCellProperty("body", setCellIdx, "background" ,"");
  1922. gridID.setCellProperty("body", setCellIdx, "background2" ,"");
  1923. gridID.setCellProperty("body", setCellIdx, "font" ,"");
  1924. } else if ( fillflag == "F" ) {
  1925. style = new Array("#ffff00", "#ccffcc", "#FF9A00");
  1926. gridID.setCellProperty("body", setCellIdx, "color" ,"");
  1927. gridID.setCellProperty("body", setCellIdx, "color" ,"");
  1928. gridID.setCellProperty("body", setCellIdx, "font" ,"");
  1929. }
  1930. var BackGroundFont = "";
  1931. var end = "";
  1932. var font = "";
  1933. if(datas.length == 1){
  1934. BackGroundFont += "expr:String(" + colRef+") == '" + dataValue +"' ? '"+styleValue+"' : ''";
  1935. font += "expr:String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : ''";
  1936. }else{
  1937. for( var j = 0 ; j < datas.length ; j++ ) {
  1938. var dataValue = datas[j];
  1939. var styleValue = style[styleFlags[j]];
  1940. if(j == datas.length-1){
  1941. BackGroundFont += "String(" + colRef+") == '" + dataValue +"' ? '"+styleValue+"' : ''";
  1942. font += "String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : ''";
  1943. }else if(j == 0){
  1944. BackGroundFont += "expr:String(" + colRef+") == '" + dataValue +"' ? '"+styleValue+"' : (";
  1945. font += "expr:String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : (";
  1946. }else{
  1947. BackGroundFont += "String(" +colRef+") == '" + dataValue +"' ? '"+styleValue+"' : (";
  1948. font += "String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : (";
  1949. }
  1950. if( j<datas.length-1)
  1951. end += ")";
  1952. }
  1953. BackGroundFont += end;
  1954. font += end;
  1955. }
  1956. if ( fillflag == "B" ) {
  1957. gridID.setCellProperty("body", setCellIdx, "background" ,BackGroundFont);
  1958. gridID.setCellProperty("body", setCellIdx, "background2" ,BackGroundFont);
  1959. gridID.setCellProperty("body", setCellIdx, "font" ,font);
  1960. } else if ( fillflag == "F" ) {
  1961. gridID.setCellProperty("body", setCellIdx, "color" ,BackGroundFont);
  1962. gridID.setCellProperty("body", setCellIdx, "color" ,BackGroundFont);
  1963. gridID.setCellProperty("body", setCellIdx, "font" ,font);
  1964. }
  1965. }
  1966. /**********************************************************************************
  1967. * 함수명 : grdf_setRowStyle
  1968. * 설명 : 그리드의 Row Style 지정
  1969. * argument : Object gridID - 그리드 아이디
  1970. String styleFlag - 컬러 인덱스
  1971. String data - 데이터 값
  1972. Srting colRef - 비교할 컬럼 Ref
  1973. String [control] - 조건 smaller | smallerThen | equal | biggerThen | bigger
  1974. * return Type : none
  1975. * 사용예 : grdf_setRowStyle( Grid00 , "0^2" , "3^5" , "Column1" , "small^small" )
  1976. * 작성자 : tobesoft
  1977. **********************************************************************************/
  1978. function grdf_setRowStyle( gridID , styleFlag , data , colRef , control ) {
  1979. var fillStyle = "";
  1980. var style = new Array("#fcd2c1" , "#ffe79d" , "#f3e1bf" , "#7BE6B7" , "#b9e5fb" , "#f7a08b" , "#fec34d" , "#dec6a4" , "#c8e67b" ,
  1981. "#43c8f5" , "#ff9933" , "#3399ff" , "#9999cc" , "#FFC8C8" , "#fab7bf" , "#ffff00" , "#ccffcc" , "#FF9A00", "#ff0000");
  1982. var styleFlags = styleFlag.split("^");
  1983. var datas = data.split("^");
  1984. if( control == null || control == "" )
  1985. control = "equal";
  1986. var controls = control.split("^");
  1987. var BackGroundFont = "";
  1988. var end = "";
  1989. for( var j = 0 ; j < datas.length ; j++ ) {
  1990. var dataValue = datas[j];
  1991. var styleValue = style[styleFlags[j]];
  1992. if(controls[j] == null)
  1993. controls[j] = "equal";
  1994. var ctrl = "";
  1995. switch( controls[j] ) {
  1996. case "small":
  1997. ctrl = "<";
  1998. break;
  1999. case "smallThen":
  2000. ctrl = "<=";
  2001. break;
  2002. case "bigger":
  2003. ctrl = ">";
  2004. break;
  2005. case "biggerThen":
  2006. ctrl = ">=";
  2007. break;
  2008. case "equal":
  2009. ctrl = "==";
  2010. break;
  2011. case "notEqual":
  2012. ctrl = "!=";
  2013. break;
  2014. }
  2015. if(j == datas.length-1){
  2016. if(datas.length == 1){
  2017. BackGroundFont = "expr:String(" + colRef +") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : ''";
  2018. }else{
  2019. BackGroundFont += "String(" + colRef+") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : ''";
  2020. }
  2021. }else if(j == 0){
  2022. BackGroundFont += "expr:String(" + colRef+") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : (";
  2023. }else{
  2024. BackGroundFont += "String("+colRef+") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : (";
  2025. }
  2026. if( j<datas.length-1)
  2027. end += ")";
  2028. }
  2029. BackGroundFont += end;
  2030. for(var i=0; i<gridID.getCellCount("body");i++){
  2031. gridID.setCellProperty("body", i, "background" ,BackGroundFont);
  2032. gridID.setCellProperty("body", i, "background2" ,BackGroundFont);
  2033. }
  2034. }
  2035. /**********************************************************************************
  2036. * 함수명 : grdf_initGridStyle
  2037. * 설명 : 그리드의 Style 초기화(배경, 글씨색, font)
  2038. * argument : Object gridID - 그리드 아이디
  2039. * return Type : none
  2040. * 사용예 : grdf_setRowStyle( Grid00 , "0^2" , "3^5" , "Column1" , "small^small" )
  2041. * 작성자 : tobesoft
  2042. **********************************************************************************/
  2043. function grdf_initGridStyle(gridID){
  2044. for(var i=0; i<gridID.getCellCount("body");i++){
  2045. gridID.setCellProperty("body", i, "background" ,"");
  2046. gridID.setCellProperty("body", i, "background2" ,"");
  2047. gridID.setCellProperty("body", i, "color" ,"");
  2048. gridID.setCellProperty("body", i, "color2" ,"");
  2049. gridID.setCellProperty("body", i, "font" ,"");
  2050. }
  2051. }
  2052. /**********************************************************************************
  2053. * 함수명 : grdf_setCellMask
  2054. * 설명 : 그리드 Cell Mask 처리시 null 인경우 Mask 처리 안함
  2055. * argument : Cell : col - 그리드 Cell Bind Column
  2056. Mask String : sMask - mask
  2057. * return Type : none
  2058. * 사용예 : expr:grdf_setCellMask(Column0,"#####-#####") //Cell Mask에 적용
  2059. Grid00.setCellProperty("body",2,"mask", "expr:grdf_setCellMask(Column2,'###-###')");
  2060. * 작성자 : tobesoft
  2061. **********************************************************************************/
  2062. function grdf_setCellMask(col, sMask){
  2063. if( utlf_isNull(col))
  2064. {
  2065. return "";
  2066. }
  2067. return sMask;
  2068. }
  2069. /**********************************************************************************
  2070. * 함수명 : grdf_getSelectedCols
  2071. * 설명 : 그리드의 선택된 컬럼index를 리턴(숨겨준 컬럼은 제외)
  2072. * argument : oGrid 그리드 객체
  2073. * return Type : Array : 선택된 셀의 index 값이 들어있는 array
  2074. * 사용예 : var SelectedCells = grdf_getSelectedCols(SelectedGrdObj);
  2075. * 작성자 : 김상목
  2076. **********************************************************************************/
  2077. function grdf_getSelectedCols(oGrid:Grid) {
  2078. var selectedCols = new Array();
  2079. var startCol = oGrid.selectstartcol;
  2080. var endCol = oGrid.selectendcol;
  2081. if(startCol[0] >= 0) { // 선택된 열이 없을 경우에 대한 예외 처리 추가
  2082. for(var i = 0; i < startCol.length; i++) {
  2083. var columnIndex = startCol[i];
  2084. for(var j = columnIndex; j <= endCol[i]; j++) {
  2085. if(oGrid.getFormatColProperty(j, "size") != 0) // 숨겨준 컬럼은 제외
  2086. selectedCols[selectedCols.length] = j;
  2087. }
  2088. }
  2089. }
  2090. return selectedCols;
  2091. }
  2092. /**********************************************************************************
  2093. * 함수명 : grdf_getSelectedRows
  2094. * 설명 : 그리드의 선택된 로우index를 리턴
  2095. * argument : oGrid 그리드 객체
  2096. * return Type : Array : 선택된 로우의 index 값이 들어있는 array
  2097. * 사용예 : var SelectedRows = grdf_getSelectedRows(SelectedGrdObj);
  2098. * 작성자 : 김상목
  2099. **********************************************************************************/
  2100. function grdf_getSelectedRows(oGrid:Grid) {
  2101. var selectedRows = new Array();
  2102. var startRow = oGrid.selectstartrow;
  2103. var endRow = oGrid.selectendrow;
  2104. if(startRow[0] >= 0) { // 선택된 행이 없을 경우에 대한 예외 처리 추가
  2105. for(var i = 0; i < startRow.length; i++) {
  2106. var columnIndex = startRow[i];
  2107. for(var j = columnIndex; j <= endRow[i]; j++) {
  2108. selectedRows[selectedRows.length] = j;
  2109. }
  2110. }
  2111. }
  2112. return selectedRows;
  2113. }
  2114. /**********************************************************************************
  2115. * 함수명 : grdf_setSelectedCell
  2116. * 설명 : 그리드의 선택 영역을 체크하여 미선택 영역이면 선택 시켜준다
  2117. * argument : oGrid 그리드 객체
  2118. e 그리드 마우스 이벤트
  2119. * return Type : boolean : 그리의 셀이 text 와 같이 편집 가능한 셀의 경우 팝업 메뉴와 윈도우 기본 편집 팝업을
  2120. 구분하여 띄우기 위함(true : 팝업 메뉴, false : 윈도우 기본 편집 팝업 호출 가능 상태)
  2121. * 사용예 : grdf_setSelectedCell(obj, e);
  2122. * 작성자 : 김상목
  2123. **********************************************************************************/
  2124. function grdf_setSelectedCell(obj:Grid, e:GridMouseEventInfo) {
  2125. // 범위 밖의 셀 클릭 예외 처리
  2126. if(e.row < 0 || e.col < 0) return false;
  2127. if(!obj.isSelectedCell(e.cell, "body", e.row)) {
  2128. var dataset = eval(obj.binddataset);
  2129. if( obj.selecttype == "multirow" ){
  2130. dataset.selectRow(e.row);
  2131. }
  2132. dataset.rowposition = e.row;
  2133. obj.setCellPos(e.cell);
  2134. }
  2135. // 셀편집중이 아닐 때만 메뉴팝업 뜰 수 있도록 처리
  2136. if(obj.getEditText() != undefined)
  2137. return false;
  2138. return true;
  2139. }
  2140. /**********************************************************************************
  2141. * 함수명 : grdf_setStatusColumn
  2142. * 설명 : 데이터셋에 그리드의 rowType에 따라 status 컬럼의 값을 업데이트 시켜준다.
  2143. * argument : oDataSet 그리드의 업데이트 할 데이터셋으로 필터링된 데이터셋
  2144. sStatus status로 쓰고 있는 컬럼의 이름
  2145. * return Type :
  2146. * 사용예 : grdf_setStatusColumn(oDsUpdate, sStatus);
  2147. * 작성자 : 김상목
  2148. **********************************************************************************/
  2149. function grdf_setStatusColumn(oDataSet:Dataset, sStatus) {
  2150. if(utlf_isNull(oDataSet.getColumnInfo(sStatus)))
  2151. oDataSet.addColumn(sStatus, "string");
  2152. var count = oDataSet.rowcount;
  2153. for(var i = 0; i < count; i++) {
  2154. var status = "n";
  2155. var rowType = oDataSet.getRowType(i);
  2156. if(rowType == 2)
  2157. status = "i";
  2158. else if(rowType == 4)
  2159. status = "u";
  2160. else if(rowType == 8)
  2161. status = "d";
  2162. oDataSet.setColumn(i, sStatus, status);
  2163. }
  2164. }
  2165. /**********************************************************************************
  2166. * 함수명 : grdf_expandTree
  2167. * 설명 : Tree로 구성된 그리드에서 특정 위치까지 Tree를 expand 시켜준다.
  2168. * argument : oGrid - 그리드 오브젝트
  2169. nSelectVal - 그리드에 바인드 되어 있는 Dataset 기준의 rowposition
  2170. bExpand - 특정 위치 선택 후 click event 까지 발생시킬 것인지 유무
  2171. * return Type :
  2172. * 사용예 : grdf_expandTree(grd_tree, 88);
  2173. * 작성자 : 김상목
  2174. **********************************************************************************/
  2175. function grdf_expandTree(oGrid:Grid, nSelectVal, bExpand) {
  2176. var parentRow = nSelectVal;
  2177. var path = new Array();
  2178. var index = 0;
  2179. if(utlf_isNull(nSelectVal) || nSelectVal < 0) {
  2180. parentRow = nSelectVal = 0;
  2181. path[index++] = 0;
  2182. } else {
  2183. path[index++] = nSelectVal;
  2184. }
  2185. while(parentRow >= 0) {
  2186. parentRow = oGrid.getTreeParentRow(parentRow, true);
  2187. if(parentRow > -1)
  2188. path[index++] = parentRow;
  2189. }
  2190. // 그리드를 먼저 초기화 하고 작업 시작
  2191. oGrid.treeinitstatus = "collapse,all";
  2192. var ds_bind = eval(oGrid.binddataset);
  2193. ds_bind.rowposition = -1;
  2194. for(var i = path.length - 1; i >= 0; i--) {
  2195. var row = oGrid.getTreeRow(path[i]);
  2196. if(row > -1 && !oGrid.isTreeLeafRow(row, false))
  2197. oGrid.setTreeStatus(row, (!bExpand && (path[i] == nSelectVal)) ? false : true);
  2198. }
  2199. if(!utlf_isNull(oGrid.userdata)) // userdata 있을 경우 0으로 초기화(행 클릭시 expand를 위해 사용)
  2200. oGrid.userdata = 0;
  2201. // 작업이 끝난 후 그리드 포커스 및 셀렉트 설정
  2202. oGrid.setFocus();
  2203. ds_bind.rowposition = nSelectVal;
  2204. if(bExpand) // expand 라면 oncellclick 이벤트를 호출 시켜 바로 데이터 조회를 할 수 있도록 함
  2205. oGrid.oncellclick.fireEvent(oGrid, new GridClickEventInfo());
  2206. }
  2207. /**********************************************************************************
  2208. * 함수명 : grdf_expandDepth
  2209. * 설명 : Tree로 구성된 그리드에서 lvl에 해당 하는 특정 위치까지 Tree를 expand 시켜준다.
  2210. * argument : oGrid - 그리드 오브젝트
  2211. lvl - expand 시킬 레벨
  2212. treeColNm - 그리드에서 트리로 사용하고 있는 컬럼 이름(입력하지 않으면 첫번째 트리로 설정된 컬럼을 찾도록 되어 있음)
  2213. * return Type :
  2214. * 사용예 : grdf_expandDepth(grd_tree, 1, "indxnm");
  2215. * 작성자 : 김상목
  2216. **********************************************************************************/
  2217. function grdf_expandDepth(oGrid:Grid, lvl, treeColNm) {
  2218. if(utlf_isNull(treeColNm)) { // 컬럼 이름 미 입력시 edittype이 tree로 설정되어 있는 첫번째 컬럼의 컬럼 이름 사용
  2219. for (var i = 0; i < oGrid.getFormatColCount(); i++) {
  2220. var edittype = oGrid.getCellProperty("body", i, "edittype");
  2221. if(edittype == "tree") {
  2222. var text = oGrid.getCellProperty("body", i, "text");
  2223. treeColNm = text.split(":")[1];
  2224. break;
  2225. }
  2226. }
  2227. }
  2228. var col = oGrid.getBindCellIndex("body", treeColNm);
  2229. var treelevel = oGrid.getCellProperty("body", col, "treelevel");
  2230. var startlevel = parseInt(oGrid.getCellProperty("body", col, "treestartlevel"));
  2231. var lvlNm = treelevel.split(":")[1];
  2232. var expr = "";
  2233. var comp_expr = "";
  2234. for(var i = startlevel; i <= lvl; i++) {
  2235. var prefix = (i == startlevel) ? "" : " || ";
  2236. expr += prefix + lvlNm + " == '" + i + "'";
  2237. comp_expr += prefix + "levl" + " == '" + i + "'";
  2238. }
  2239. oGrid.treeinitstatus = "collapse,all";
  2240. var ds_bind = eval(oGrid.binddataset);
  2241. var lvl1Cnt = ds_bind.getCaseCount(expr);
  2242. var findLvl1 = 0;
  2243. var rowcount = ds_bind.rowcount;
  2244. for(var i = 0; i < rowcount; i++) {
  2245. var levl = ds_bind.getColumn(i, lvlNm);
  2246. if(eval(comp_expr)) {
  2247. findLvl1++;
  2248. var row = oGrid.getTreeRow(i);
  2249. if(row > -1 && !oGrid.isTreeLeafRow(row, false))
  2250. oGrid.setTreeStatus(row, true);
  2251. if(findLvl1 == lvl1Cnt) break;
  2252. }
  2253. }
  2254. }
  2255. // 그리드 keystring을 사용하지 않고 그리드에 바인드 되어 있는 실제 데이타셋을 변경 할 때 사용하는 sort
  2256. // 처방 화면의 처방 리스트에 적용
  2257. // 김상목
  2258. function grdf_gridSort2(obj:Grid, e:GridClickEventInfo) {
  2259. var bindDs = eval(obj.binddataset);
  2260. if (bindDs.rowcount == 0) return false;
  2261. var colName = lf_getBindCellName(obj, e.col);
  2262. bindDs.enableevent = false;
  2263. bindDs.applyChange();
  2264. for (var i = 0; i < obj.getCellCount("head"); i++) {
  2265. var strHeadText = obj.getCellText(-1, i);
  2266. if(strHeadText == "undefined")
  2267. continue;
  2268. // CONST_DESC_MARK -> CONST_ASC_MARK
  2269. if(i == e.cell) {
  2270. if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK) { // 내림차순으로 정렬
  2271. obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2) + " " + CONST_DESC_MARK);
  2272. realSort("desc", colName, bindDs);
  2273. } else if (strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK) { // 오름차순으로 정렬
  2274. obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2) + " " + CONST_ASC_MARK);
  2275. realSort("asc", colName, bindDs);
  2276. } else { // 내림차순으로 정렬
  2277. obj.setCellProperty("head", i, "text", strHeadText + " " + CONST_DESC_MARK);
  2278. realSort("desc", colName, bindDs);
  2279. }
  2280. } else { // 나머지는 정렬표시 삭제
  2281. if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK || strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK) {
  2282. obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2));
  2283. }
  2284. }
  2285. }
  2286. bindDs.applyChange();
  2287. bindDs.enableevent = true;
  2288. }
  2289. //20181012 이돈희 : 다른 패키지에서 realSort 사용을 위하여 grdf_realSort 함수 생성
  2290. function grdf_realSort(mode, colName, oDs:Dataset) {
  2291. realSort(mode, colName, oDs);
  2292. }
  2293. function realSort(mode, colName, oDs:Dataset) {
  2294. quickSort(mode, oDs, colName, 0, oDs.rowcount - 1);
  2295. }
  2296. function quickSort(mode, oDs:Dataset, colName, oldleft, oldright) {
  2297. var pivot = oldright; // pivot의 값
  2298. var left = oldleft; // 좌 인덱스
  2299. var right = oldright; // 우 인덱스
  2300. while(left < right) {
  2301. if(mode == "asc") {
  2302. while(true) {
  2303. var leftVal = utlf_transNullToEmpty(oDs.getColumn(left, colName));
  2304. var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
  2305. //if(leftVal.isNumber()) leftVal = parseFloat(leftVal);
  2306. //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
  2307. if(leftVal <= pivotVal && (left < right))
  2308. left++;
  2309. else
  2310. break;
  2311. }
  2312. while(true) {
  2313. var rightVal = utlf_transNullToEmpty(oDs.getColumn(right, colName));
  2314. var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
  2315. //if(rightVal.isNumber()) rightVal = parseFloat(rightVal);
  2316. //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
  2317. if(rightVal >= pivotVal && (left < right))
  2318. right--;
  2319. else
  2320. break;
  2321. }
  2322. } else {
  2323. while(true) {
  2324. var leftVal = utlf_transNullToEmpty(oDs.getColumn(left, colName));
  2325. var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
  2326. //if(leftVal.isNumber()) leftVal = parseFloat(leftVal);
  2327. //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
  2328. if(leftVal >= pivotVal && (left < right))
  2329. left++;
  2330. else
  2331. break;
  2332. }
  2333. while(true) {
  2334. var rightVal = utlf_transNullToEmpty(oDs.getColumn(right, colName));
  2335. var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
  2336. //if(rightVal.isNumber()) rightVal = parseFloat(rightVal);
  2337. //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
  2338. if(rightVal <= pivotVal && (left < right))
  2339. right--;
  2340. else
  2341. break;
  2342. }
  2343. }
  2344. if (left != right)
  2345. oDs.exchangeRow(left, right);
  2346. }
  2347. oDs.exchangeRow(left, pivot);
  2348. pivot = left;
  2349. if (oldleft < pivot)
  2350. quickSort(mode, oDs, colName, oldleft, pivot - 1);
  2351. if (oldright > pivot)
  2352. quickSort(mode, oDs, colName, pivot + 1, oldright);
  2353. }
  2354. /****************************************************************************************
  2355. * Function : grdf_setGridEllipsisText
  2356. * Description : 실제 Cell의 크기와 글자 길이에 따라 '...'을 붙혀서 값을 반환하고나 셀의 align을 설정해준다.
  2357. * 데이타셋 조회 후 사용해야 함
  2358. * <사용하면 안되는 경우>
  2359. * 1) 셀의 expr 에 값이 있는 경우 사용하면 안됨
  2360. * 2) 셀의 text에 expr 처리되어 있는 경우
  2361. * 3) 셀의 align 에 디폴트값 이외의 값이 있는 경우
  2362. * Argument : oGrid - 그리드 객체
  2363. * colNames - 컬럼이름을 가진 배열 (예. ["deptnm", "msgcnts"])
  2364. * onlyVAlignYN - Ellipsis 기능을 빼고 오직 세로 정렬 기능만 사용하는 경우
  2365. * 사용예 : grdf_setGridEllipsisText(grd_receivemsg, ["deptnm", "msgcnts"]);
  2366. * return type :
  2367. * Creator : 김상목
  2368. ****************************************************************************************/
  2369. function grdf_setGridEllipsisText(oGrid, colNames, onlyVAlignYN) {
  2370. var oDs = this.objects[oGrid.binddataset];
  2371. var cnt = oDs.rowcount;
  2372. oGrid.onlyVAlignYN = onlyVAlignYN;
  2373. oGrid.updateToDataset();
  2374. oDs.updatecontrol = false;
  2375. oDs.enableevent = false;
  2376. oGrid.enableevent = false;
  2377. oGrid.enabelredraw = false;
  2378. oGrid.ellipsis = colNames;
  2379. oGrid.oncolresized.addHandler(fOnColResized_Ellipsis);
  2380. oGrid.onkillfocus.addHandler(fOnKillfocus_Ellipsis);
  2381. // oGrid.onselectchanged.addHandler(fOnSelectchanged_Ellipsis);
  2382. // oGrid.onnodataareaclick.addHandler(fOnNodataareaclick_Ellipsis);
  2383. oGrid.onlbuttondown.addHandler(fOnLbuttondown_Ellipsis);
  2384. for(var i = 0; i < colNames.length; i++) {
  2385. var newColName = colNames[i] + "_ellipsis";
  2386. oDs.addColumn(newColName, "string", 256);
  2387. oDs.addColumn("top_align", "string", 256);
  2388. }
  2389. for( var i = 0; i < cnt; i++) {
  2390. for(var j = 0; j < colNames.length; j++) {
  2391. var newColName = colNames[j] + "_ellipsis";
  2392. var newColIndex = oGrid.getBindCellIndex("body", colNames[j]);
  2393. if(newColIndex < 0) // 한번 설정하고 나면 bind 이름이 _ellipsis가 붙기 때문에 기존이름으로는 위치 확인이 안되므로 붙혀서 다시 검색
  2394. newColIndex = oGrid.getBindCellIndex("body", newColName);
  2395. if(newColIndex < 0) continue; // 그래도 없으면 패스
  2396. var msgcnts = lf_getGridEllipsisText(oGrid, newColIndex, colNames[j], i);
  2397. oDs.setColumn(i, newColName, msgcnts);
  2398. // expr 에 표현할 값 셋팅, align은 ...없이 2라인 이상 일때는 top으로 설정
  2399. if(i == cnt - 1) {
  2400. oGrid.setCellProperty("body", newColIndex, "expr", "expr:utlf_isNull(" + newColName + ") ? (utlf_isNull(" + colNames[j] + ") ? '' : " + colNames[j] + ") : " + newColName);
  2401. oGrid.setCellProperty("body", newColIndex, "align", "EXPR(top_align == 'Y' ? 'left top' : 'left middle')");
  2402. }
  2403. }
  2404. }
  2405. oDs.enableevent = true;
  2406. oGrid.enableevent = true;
  2407. oGrid.enabelredraw = true;
  2408. oDs.updatecontrol = true;
  2409. }
  2410. function fOnColResized_Ellipsis(obj:Grid, e:GridSizeChangedEventInfo)
  2411. {
  2412. grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
  2413. }
  2414. function fOnKillfocus_Ellipsis(obj:Grid, e:KillFocusEventInfo)
  2415. {
  2416. grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
  2417. }
  2418. // function fOnSelectchanged_Ellipsis(obj:Grid, e:GridSelectEventInfo)
  2419. // {
  2420. // grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
  2421. // }
  2422. //
  2423. // function fOnNodataareaclick_Ellipsis(obj:Grid, e:EventInfo)
  2424. // {
  2425. // grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
  2426. // }
  2427. function fOnLbuttondown_Ellipsis(obj:Grid, e:GridMouseEventInfo)
  2428. {
  2429. grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
  2430. }
  2431. function lf_getGridEllipsisText(ctrlObj, colIndex, colName, row) {
  2432. var oDs = this.objects[ctrlObj.binddataset];
  2433. var text = oDs.getColumn(row, colName);
  2434. var result = text;
  2435. var isMiddleAlign = false;
  2436. // 정렬 초기화
  2437. oDs.setColumn(row, "top_align", "");
  2438. if(utlf_isNull(text)) {
  2439. result = "";
  2440. } else {
  2441. text = text.replace(/\r\n/g, "\n");
  2442. var arrText = text.split("\n");
  2443. text = arrText[0]
  2444. var font = ctrlObj.getCellProperty("body", colIndex, "font");
  2445. if(utlf_isNull(font)) font = "Dotum,9";
  2446. var fontStyle = font.toString().split(',');
  2447. var bold = false;
  2448. if(fontStyle.length > 2 && fontStyle[2] == "bold") bold = true;
  2449. var objFont = utlf_getObjFont(fontStyle[1], fontStyle[0], bold); // 실제 폰트의 너비
  2450. var objFontSize = utlf_getTextSize(text, objFont);
  2451. var paddingSize = 0;
  2452. var padding = ctrlObj.getCellProperty("body", colIndex, "padding");
  2453. if(!utlf_isNull(padding) && padding.length == 4) {
  2454. paddingSize = padding[1] + padding[3];
  2455. }
  2456. var arrCellRect = ctrlObj.getCellRect(0, colIndex);
  2457. var width = arrCellRect.width - paddingSize - ctrlObj.vscrollbar.position.width + 12; // 실제 글자가 들어갈 수 있는 영역 너비(width - padding 좌우영역 - 세로 스크롤 넓이 + 10은 보정값)
  2458. var index = text.length;
  2459. if(objFontSize.cx > width) {
  2460. var first = 0;
  2461. var last = text.length - 1;
  2462. var mid = 0;
  2463. var textSize;
  2464. while(first <= last) {
  2465. mid = parseInt((first + last) / 2);
  2466. textSize = utlf_getTextSize(text.substring(0, mid) + "...", objFont);
  2467. if(width == textSize.cx) {
  2468. break;
  2469. } else {
  2470. if(textSize.cx < width)
  2471. first = mid + 1;
  2472. else
  2473. last = mid - 1;
  2474. }
  2475. }
  2476. if(textSize.cx > width) // 글자가 걸쳐 있는 경우 인덱스 하나를 더 빼준다.
  2477. mid -= 1;
  2478. if(mid > 0) {
  2479. if(ctrlObj.onlyVAlignYN != "Y")
  2480. result = text.substring(0, mid) + "...";
  2481. isMiddleAlign = true;
  2482. }
  2483. }
  2484. if(arrText.length > 1) {
  2485. if(!isMiddleAlign) {
  2486. oDs.setColumn(row, "top_align", "Y"); // ...이 적용 되어 있지 않고 2라인 이상 보일때는 세로 정렬을 top로 한다
  2487. }
  2488. }
  2489. }
  2490. return result;
  2491. }
  2492. /****************************************************************************************
  2493. * Function : grdf_setGridIsEdit
  2494. * Description : 그리드 autoenter key 모드에서 키(Del/Enter) 동작에 따른 Edit 상태 체크
  2495. * [기록 그리드 사용]
  2496. * Argument : oGrid - 그리드 객체
  2497. * 사용예 : grdf_setGridIsEdit(grd_diaglist);
  2498. oGrid.isDelEdit / oGrid.isEnterEdit
  2499. * return type : N/A
  2500. * Creator :
  2501. ****************************************************************************************/
  2502. function grdf_setGridIsEdit(oGrid){
  2503. oGrid.isDelEdit = false;
  2504. oGrid.isEnterEdit = false;
  2505. oGrid.controltextarea.onkeydown.addHandler(lf_Controltextarea_onkeydown);
  2506. oGrid.controltextarea.onkillfocus.addHandler(lf_Controltextarea_onkillfocus);
  2507. }
  2508. function lf_Controltextarea_onkeydown(obj, e){
  2509. if(e.keycode == 46){ //DEL
  2510. obj.parent.isDelEdit = true;
  2511. }else if(e.keycode == 13){ // Enter
  2512. obj.parent.isEnterEdit = true;
  2513. }
  2514. }
  2515. function lf_Controltextarea_onkillfocus(obj, e){
  2516. obj.parent.isDelEdit = false;
  2517. obj.parent.isEnterEdit = false;
  2518. }
  2519. /***************************************************************************************************
  2520. * Function : grdf_getBindCellName
  2521. * Description : 그리드에서 컬럼 인덱스로 바인드된 데이터셋의 컬럼명을 가져온다.
  2522. * Argument : oTrgtGrid
  2523. : nColumnIndx
  2524. * return type : String
  2525. * Creator : 김상목
  2526. ***************************************************************************************************/
  2527. function grdf_getBindCellName(oTrgtGrid, nColumnIndx){
  2528. var sRtnText = "";
  2529. var sTrgtText = oTrgtGrid.getCellProperty("body", nColumnIndx, "text");
  2530. if(!utlf_isNull( sTrgtText)){
  2531. sRtnText = sTrgtText.replace("bind:", "");
  2532. }
  2533. return sRtnText;
  2534. }
  2535. /****************************************************************************************
  2536. * Function : grdf_validGridTime
  2537. * Description : Grid를 시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용)
  2538. * Argument : 01.obj - Grid object
  2539. * : 02.e - GridEditTextChangeEventInfo event
  2540. * : 03.bHalfTime - 12:00 기준인지 여부(defalt는 24:00, true/false)
  2541. * return type : null
  2542. * Creator : 추민수
  2543. ****************************************************************************************/
  2544. function grdf_validGridTime(obj:Grid, e:GridEditTextChangeEventInfo, bHalfTime){
  2545. var sPosttext = utlf_trim((e.posttext).replace(":", "").replace("_", ""));
  2546. var nFirstTime = 2;
  2547. var nSecondTime = 3;
  2548. if( !utlf_isNull(bHalfTime) && bHalfTime == true ){
  2549. nFirstTime = 1;
  2550. nSecondTime = 1;
  2551. }
  2552. if( !utlf_isNull(sPosttext.substring(0, 1)) ){
  2553. if( eval(sPosttext.substring(0, 1)) > nFirstTime ){
  2554. obj.setEditText("");
  2555. obj.setEditCaret(0);
  2556. return;
  2557. }
  2558. }
  2559. if( !utlf_isNull(sPosttext.substring(1, 2)) ){
  2560. if( eval(sPosttext.substring(0, 1)) > (nFirstTime-1) ){
  2561. if( eval(sPosttext.substring(1, 2)) > nSecondTime ){
  2562. obj.setEditText(sPosttext.substring(0, 1));
  2563. obj.setEditCaret(1);
  2564. return;
  2565. }
  2566. }
  2567. }
  2568. if( !utlf_isNull(sPosttext.substring(2, 3)) ){
  2569. if( eval(sPosttext.substring(2, 3)) > 5 ){
  2570. obj.setEditText(sPosttext.substring(0, 2));
  2571. obj.setEditCaret(2);
  2572. return;
  2573. }
  2574. }
  2575. }
  2576. /****************************************************************************************
  2577. * Function : grdf_validGridDateTime
  2578. * Description : Grid를 날짜+시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용)
  2579. * Argument : 01.obj - Grid object
  2580. * : 02.e - GridEditTextChangeEventInfo event
  2581. * : 03.bHalfTime - 12:00 기준인지 여부(defalt는 24:00, true/false)
  2582. * return type : null
  2583. * Creator : 추민수
  2584. ****************************************************************************************/
  2585. function grdf_validGridDateTime(obj:Grid, e:GridEditTextChangeEventInfo, bHalfTime){
  2586. var sPosttext = utlf_trim((e.posttext).replace(":", "").replace("_", "").replace("-", "").replace(" ", ""));
  2587. var nFirstTime = 2;
  2588. var nSecondTime = 3;
  2589. if( !utlf_isNull(bHalfTime) && bHalfTime == true ){
  2590. nFirstTime = 1;
  2591. nSecondTime = 1;
  2592. }
  2593. if( !utlf_isNull(sPosttext.substring(3, 4)) ){
  2594. if( sPosttext.substring(0, 3) == "000" && eval(sPosttext.substring(3, 4)) == 0 ){
  2595. obj.setEditText(sPosttext.substring(0, 3));
  2596. obj.setEditCaret(2);
  2597. return;
  2598. }
  2599. }
  2600. if( !utlf_isNull(sPosttext.substring(4, 5)) ){
  2601. if( eval(sPosttext.substring(4, 5)) > 1 ){
  2602. obj.setEditText(sPosttext.substring(0, 4));
  2603. obj.setEditCaret(4);
  2604. return;
  2605. }
  2606. }
  2607. if( !utlf_isNull(sPosttext.substring(5, 6)) ){
  2608. if( sPosttext.substring(4, 5) == "0" && eval(sPosttext.substring(5, 6)) == 0 ||
  2609. sPosttext.substring(4, 5) == "1" && eval(sPosttext.substring(5, 6)) > 2 ){
  2610. obj.setEditText(sPosttext.substring(0, 5));
  2611. obj.setEditCaret(6);
  2612. return;
  2613. }
  2614. }
  2615. if( !utlf_isNull(sPosttext.substring(6, 7)) ){
  2616. if( eval(sPosttext.substring(6, 7)) > 3 ){
  2617. obj.setEditText(sPosttext.substring(0, 6));
  2618. obj.setEditCaret(7);
  2619. return;
  2620. }
  2621. }
  2622. if( !utlf_isNull(sPosttext.substring(7, 8)) ){
  2623. if( sPosttext.substring(6, 7) == "0" && eval(sPosttext.substring(7, 8)) == 0 ||
  2624. sPosttext.substring(6, 7) == "3" && eval(sPosttext.substring(7, 8)) > 1 ){
  2625. obj.setEditText(sPosttext.substring(0, 7));
  2626. obj.setEditCaret(9);
  2627. return;
  2628. }
  2629. }
  2630. if( !utlf_isNull(sPosttext.substring(8, 9)) ){
  2631. if( eval(sPosttext.substring(8, 9)) > nFirstTime ){
  2632. obj.setEditText(sPosttext.substring(0, 8));
  2633. obj.setEditCaret(10);
  2634. return;
  2635. }
  2636. }
  2637. if( !utlf_isNull(sPosttext.substring(9, 10)) ){
  2638. if( eval(sPosttext.substring(8, 9)) > (nFirstTime-1) ){
  2639. if( eval(sPosttext.substring(9, 10)) > nSecondTime ){
  2640. obj.setEditText(sPosttext.substring(0, 9));
  2641. obj.setEditCaret(12);
  2642. return;
  2643. }
  2644. }
  2645. }
  2646. if( !utlf_isNull(sPosttext.substring(10, 11)) ){
  2647. if( eval(sPosttext.substring(10, 11)) > 5 ){
  2648. obj.setEditText(sPosttext.substring(0, 10));
  2649. obj.setEditCaret(13);
  2650. return;
  2651. }
  2652. }
  2653. }
  2654. /****************************************************************************************
  2655. * Function : grdf_controlGridCalendar
  2656. * Description : Grid Calendar 클릭횟수를 줄이기 위한 함수.(oncellclick함수에 사용)
  2657. * Argument : 01.obj - Grid object
  2658. * : 02.e - GridClickEventInfo event
  2659. * return type : null
  2660. * Creator : 윤주호
  2661. ****************************************************************************************/
  2662. function grdf_controlGridCalendar(obj:Grid, e:GridClickEventInfo){
  2663. if( obj.getCellProperty("body", e.col, "edittype") != "date" ) return;
  2664. var rSize = 0;
  2665. var oRect = obj.getCellRect(e.row, e.col);
  2666. if( !utlf_isNull(oRect) ){
  2667. rSize = oRect.right;
  2668. if (e.clientX >= (rSize - 25) && e.clientX < rSize){
  2669. obj.showEditor(true);
  2670. obj.dropdownCalendar();
  2671. }
  2672. }
  2673. }
  2674. /****************************************************************************************
  2675. * Function : grdf_colHidden
  2676. * Description : 그리드 컬럼숨기기 실행. 초기사이즈가 0이면 기본 100으로 사이즈설정
  2677. * : 초기사이즈 0 으로 설정된 컬럼의 경우 그냥 setFormatColProperty 사용권장
  2678. * Argument : 01.obj - Grid object
  2679. * : 02.arrId - 해당컬럼(ex:"col1,col2")
  2680. * : 03.arrYn - 컬럼숨김여부(ex:"Y,N") (Y : 숨기기 , N : 보이기)
  2681. * return type : null
  2682. * Creator : 노회식
  2683. ****************************************************************************************/
  2684. var orgGridColsize = new HashArray();
  2685. function grdf_colHidden(obj:Grid, arrId, arrYn) {
  2686. var arrColnm = arrId.split(",");
  2687. var arrHidYn = arrYn.split(",");
  2688. if(arrColnm.length != arrHidYn.length) return;
  2689. for(var i = 0 ; i < arrColnm.length ; i++) {
  2690. var orgSize = orgGridColsize.pop(obj.name+"_"+arrColnm[i]);
  2691. if(arrHidYn[i] == "Y") {
  2692. if(!utlf_isNull(orgSize)) obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", parseInt(orgSize));
  2693. orgGridColsize.push(obj.name+"_"+arrColnm[i], obj.getFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size"));
  2694. obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", 0);
  2695. } else {
  2696. if(obj.getFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size") > 0) continue; //이미 size설정된 경우 중지
  2697. if(!utlf_isNull(orgSize)) obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", parseInt(orgSize));
  2698. else obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", 100);
  2699. }
  2700. }
  2701. }]]></Script>