12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179 |
- <?xml version="1.0" encoding="utf-8"?>
- <Script type="xscript4.0"><![CDATA[/***************************************************************************************
- * System Name : HIT
- * Job Name :
- * File Name : comm_grd.xjs
- * Creator : tobesoft
- * Make Date : 2014-03-06
- *
- * Description : Grid API
- *---------------------------------------------------------------------------------------
- * Modify Date Modifier Modify Description
- *---------------------------------------------------------------------------------------
- * 2014-03-06 tobesoft
- *
- *---------------------------------------------------------------------------------------
- ****************************************************************************************/
-
- /********************************************************************************************************************/
- /************************* Grid 일반 *********************************************************************************/
- /********************************************************************************************************************/
- // grdf_getUpdateRows : 그리드의 데이터가 변경된 row를 반환한다.
- // grdf_getGridUpdateData : 그리드 업데이트 데이터 반환, 업데이트 정보가 없을경우 "" 반환 (2014/04/09:변경)
- // grdf_setCollapsed : 트리그리드 접기 펼치기 (2014/04/09: 변경)
- // grdf_getTreePath : 트리그리드 Tree Pass
- // grdf_getFirstCell : 첫번째 cell (2014.04.01: 변경)
- // grdf_getLastCell : 마지막 cell (2014.04.01: 변경)
- // grdf_exportExcel : Export Grid to Excel (2014.06.10: 변경)
- // (삭제)grdf_OnExport : Exprting Progressbar
- // grdf_exportCsv : Export Grid to CSV (2014.05.20:변경)
- // grdf_ImportExcel : Import Excel to Grid
- // grdf_setColumn : 그리드 컬럼 추가 / 제거
- // grdf_setStatus : 그리드 상태표시 값 변경
- // (삭제)grdf_valueCheck : 입력된 그리드의 컬럼값 NULL CHECK
- // grdf_sortNodeList : 오름차순 내림차순 mode (2014.04.04 : 변경)
- // grdf_initGrid : 그리드의 sort기능과 전체체크기능을 세텡한다.
- // grdf_setEventGrid : 그리드의 sort기능과 전체체크 이벤트중 checkbox이면 전체 체크이벤틀고 아니면 sort 이벤트로 분기한다.
- // grdf_setGridSort : Grid Sort기능 이벤트 추가
- // grdf_gridSort : Grid Sort
- // grdf_clearSort : Grid Sort clear
- // grdf_setRowTypeIcon : 그리드 상태 아이콘 보여주기
- // grdf_clipboardCopy :그리드 선택 영역을 클립보드에 복사하기
- // grdf_clipboardPaste :그리드 선택 영역에 붙여넣기 (2014.04.18 : 변경)
- // grdf_setAllCheck : 그리드 전체체크 관련 이벤트 추가 함수
- // grdf_setGridCheckAll : When you click a grid header, the entire check
- // grdf_columnSetData : chkval 값에 따라 컬럼에 데이터 입력
- // grdf_getKeyCols : 그리드의 컬럼의 속성이 true인 것의 col index array
- // grdf_setToolTipBind : 그리드의 tooltip을 자동으로 세팅한다. (2014.04.02 : 변경)
- // grdf_setCellStyle : 그리드 Cell Style 지정
- // grdf_setRowStyle : 그리드 Row Style 지정
- // grdf_initGridStyle : 그리드 Style 초기화
- // grdf_setToolTipBind : 그리드의 tooltip을 자동으로 세팅한다. (2014.04.02 : 변경)
- // grdf_setCellStyle : 그리드 Cell Style 지정 (2014.04.10 : 신규)
- // grdf_setRowStyle : 그리드 Row Style 지정 (2014.04.10 : 신규)
- // grdf_initGridStyle : 그리드 Style 초기화 (2014.04.10 : 신규)
- // grdf_addHeadClickHandler : 그리드 전체체크/해제 실적용구현(2014.04.29)
- // grdf_setGridCheckInfo: 그리드 head 클릭시 body Cell Index 구해오기(2014.05.12)
- // grdf_exportExcelMulti: 다수 그리드 sheet별 저장(2014.06.10: 변경)
- // grdf_setCellMask: 그리드 Cell Mask 처리시 null 인경우 Mask 처리 안함
- // grdf_getSelectedCols : 그리드의 선택된 컬럼index를 리턴(숨겨준 컬럼은 제외) (2014.08.22 : 신규)
- // grdf_getSelectedRows : 그리드의 선택된 로우index를 리턴 (2014.11.04 : 신규)
- // grdf_setSelectedCell : 그리드의 선택 영역을 체크하여 미선택 영역이면 선택 시켜준다 (2015.09.03 : 신규)
- // grdf_setStatusColumn : 데이터셋에 그리드의 rowType에 따라 status 컬럼의 값을 업데이트 시켜준다. (2014.08.29 : 신규)
- // grdf_expandTree : Tree로 구성된 그리드에서 특정 위치까지 Tree를 expand 시켜준다. (2014.11.13 : 신규)
- // grdf_expandDepth : Tree로 구성된 그리드에서 lvl에 해당 하는 특정 위치까지 Tree를 expand 시켜준다. (2015.01.13 : 신규)
- // grdf_setGridEllipsisText : 실제 Cell의 크기와 글자 길이에 따라 '...'을 붙혀서 값을 반환하고나 셀의 align을 설정해준다.(2016.09.27 : 신규)
- // grdf_setGridIsEdit : 그리드 autoenter key 모드에서 키(Del/Enter) 동작에 따른 Edit 상태 체크(2016.10.07 : 신규)
- // grdf_getBindCellName : 그리드에서 컬럼 인덱스로 바인드된 데이터셋의 컬럼명을 가져온다.(2016.11.08 : 신규 - 각 업무단에 흩어져 있어서 공통 함수로 추가함)
- // grdf_validGridTime : Grid를 시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용) (2017-02-13)
- // grdf_validGridDateTime : Grid를 날짜+시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용) (2017-02-13)
- // grdf_controlGridCalendar : Grid Calendar 클릭횟수를 줄이기 위한 함수.(oncellclick함수에 사용) (2017-04-03)
-
- /**********************************************************************************
- * 함수명 : grdf_getUpdateRows
- * 설명 : 그리드의 데이터가 변경된 row를 반환한다.
- * argument : String gridID - 그리드 아이디
- String status - 상태(insert, update, delete)
- Array rowArray - dataset row index array
- * return Type : Array arrRow - insert, update, delete의 dataset row index
- * 작성자 : tobesoft
- ex) grdf_getUpdateRows("Grid02", "update", ""); //return array(1,2,7,8) //row Index
- **********************************************************************************/
- function grdf_getUpdateRows( gridID, status, rowsArray ) {
- var gridObj = eval(gridID);
- var bindDs = eval(gridObj.binddataset);
- var nStatus =0;
- var nRowsArrayLen = 0;
- var arrRow = new Array();
-
- if(status == "insert")
- {
- nStatus = 2;
- }
- else if(status == "update")
- {
- nStatus = 4;
- }
- else if(status == "delete")
- {
- nStatus = 8;
- }
-
- if(!utlf_isNull(rowsArray))
- {
- arrRow = rowsArray;
- }
-
-
-
- if(status == "insert" || status == "update" || status == "delete" )
- {
- var nRowType; //row type
- for(var i =0; i < bindDs.getRowCount(); i++)
- {
- nRowType = bindDs.getRowType(i);
-
- //nStatus == 0 이면 insert, update, delete상태값
- if(nStatus == 0)
- {
- if( nRowType == 2|| nRowType == 4 || nRowType == 8 )
- {
- arrRow.push(i);
-
- }
- }
- else
- {
- if(nStatus == nRowType)
- {
- arrRow.push(i);
-
- }
- }
- }
- }
-
- return arrRow;
- }
- /**********************************************************************************
- * 함수명 : grdf_getUpdateData(삭제예정)
- * 설명 : 그리드의 데이터가 변경된 row를 반환한다.
- * argument : String gridID - 그리드 아이디
- String status - 상태(insert, update, delete)
- rowArray - array
- * return Type : Array
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_getUpdateData(objGrd, sStatus)
- {
- }
- /**********************************************************************************
- * 함수명 : grdf_getGridUpdateData
- * 설명 : 그리드 업데이트 데이터 반환, 업데이트 정보가 없을경우 "" 반환
- * argument : Object gridObj - 그리드
- String statusType - 상태("insert","update","delete","all")
- * return Type : Object Dataset
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_getGridUpdateData(gridObj, statusType)
- {
- var bindDs = eval(gridObj.binddataset);
- var arrRow = new Array();
- var nStats = null; //초기행의 상태
- var sStats = "";
- if(statusType == "insert")
- {
- nStats = 2;
- sStats = "I";
- }
- else if(statusType == "update")
- {
- nStats = 4;
- sStats = "U";
- }
- else if(statusType == "delete")
- {
- nStats = 8;
- sStats = "D";
- }
- if(utlf_isNull(nStats)){
- sStats = "all";
- }
-
- var objTempFilterDs = this.objects[dsf_createDs("ds_tempFilterDs")];//new Dataset;
- //objTempFilterDs.name = "ds_tempFilterDs";
- objTempFilterDs.copyData(bindDs);
- objTempFilterDs.clearData();
-
- objTempFilterDs.enableevent = false;
-
- //statusType에 맞는 row index array에 저장
- for(var i = 0; i < bindDs.getRowCount(); i++)
- {
- var nType = bindDs.getRowType(i);
- if(sStats == "all"){
- if(nType == 2 || nType == 4 || nType == 8)
- {
- var sType;
- if(nType == 2) sType = "I";
- if(nType == 4) sType = "U";
- if(nType == 8) sType = "D";
- var addRow = objTempFilterDs.addRow();
- objTempFilterDs.copyRow(addRow,bindDs,i);
- objTempFilterDs.updatecontrol = false;
- objTempFilterDs.setRowType(addRow,sType);
- objTempFilterDs.updatecontrol = true;
- }
-
- }else{
- if(nStats == nType)
- {
- var addRow = objTempFilterDs.addRow();
- objTempFilterDs.copyRow(addRow,bindDs,i);
- objTempFilterDs.updatecontrol = false;
- objTempFilterDs.setRowType(addRow,sStats);
- objTempFilterDs.updatecontrol = true;
- }
- }
- }
-
- objTempFilterDs.enableevent = true;
-
- return objTempFilterDs;
- }
- /************************************************************************************************
- * 함수명 : grdf_setCollapsed
- * 설명 : 트리그리드 접기 펼치기
- * argument : Object gridObj - 그리드 오브텍트
- Number nRow -Row number
- Boolean collapsed: true - Expand, false - Collapse, null 판단하여 처리
- * return Type : none
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_setCollapsed(gridObj,nRow,bStatus)
- {
- var lv_oDs = eval(gridObj.binddataset);
-
- var gridRow = gridObj.getTreeRow(nRow);
- var nChidCnt = gridObj.getTreeChildCount(gridRow, false);
- var lv_aTree = grdf_getTreePath(gridObj,nRow);
- var nCompareRow = -1;
- var nLeafRow = -1;
-
- if (gridObj.isTreeLeafRow(parseInt(lv_aTree[0])) == true){
- nLeafRow = parseInt(lv_aTree[1]);
- }else{
- nLeafRow = parseInt(lv_aTree[0]);
- }
-
- if(!utlf_isNull(bStatus)){ //펼쳐야 할지 접어야야 할지가 파라미터로 fix되어 있는경우
- for(var i= lv_aTree.length -1; i>= 1; i--)
- {
- var nRow2 = parseInt(lv_aTree[i]);
- var nGRow = gridObj.getTreeRow(nRow2) ;
-
- if (gridObj.isTreeLeafRow(nRow2) == false)
- gridObj.setTreeStatus(nGRow,bStatus);
- }
- lv_oDs.rowposition = nRow;
- lv_oDs.selectRow(nRow);
- }else{ //접혀 있으면 펼치고 펼쳐저있으면 접는 작업을 자동으로 판단하여 실행
- //판단로직
- for(var i= lv_aTree.length -1; i>= 0; i--)
- {
- if(gridObj.isTreeLeafRow(parseInt(lv_aTree[i])) == false){
- var nRow2 = parseInt(lv_aTree[i]);
-
- //일괄판단
- if(utlf_isNull(bStatus) || bStatus == false){
- if(gridObj.getTreeStatus(nRow2) == 0 ){
- bStatus = true;
- }else{
- if(!utlf_isNull(nCompareRow))nCompareRow = nRow2
- bStatus = false;
- }
- }
- }
-
- //상위는 전부 펼쳐저 있는데 마지막만 접혀 있을 경우
- if(gridObj.getTreeStatus(nLeafRow) == 0 && !bStatus ){
- bStatus = null;
- break;
- }
- }
- //판단을 실행
- if((bStatus == false && (nCompareRow == parseInt(nLeafRow))) || utlf_isNull(bStatus)){
- if (gridObj.isTreeLeafRow(parseInt(lv_aTree[0])) == true){
- var nRow2 = parseInt(lv_aTree[1]);
- }else{
- var nRow2 = parseInt(lv_aTree[0]);
- }
-
- var nGRow = gridObj.getTreeRow(nRow2) ;
- if(utlf_isNull(bStatus)){
- gridObj.setTreeStatus(nGRow,true);
- lv_oDs.rowposition = parseInt(parseInt(lv_aTree[0]));
- lv_oDs.selectRow(parseInt(lv_aTree[0]));
- }else{
- gridObj.setTreeStatus(nGRow,false);
-
- lv_oDs.rowposition = parseInt(nRow2);
- lv_oDs.selectRow(parseInt(nRow2));
- }
- }else{//전부 접혀 있는 경우 해당 루트까지 모두 펼침
- for(var i= lv_aTree.length -1; i>= 1; i--)
- {
- var nRow2 = parseInt(lv_aTree[i]);
- var nGRow = gridObj.getTreeRow(nRow2) ;
-
- if (gridObj.isTreeLeafRow(nRow2) == false)
- gridObj.setTreeStatus(nGRow,bStatus);
- }
-
- lv_oDs.rowposition = parseInt(lv_aTree[0]);
- lv_oDs.selectRow(parseInt(lv_aTree[0]));
- }
- }
- }
- /************************************************************************************************
- * 함수명 : grdf_getTreePath
- * 설명 : 트리그리드 Tree Pass(상위 node 의 root row정보 얻기)
- * argument : Object oElement - 그리드 Object
- Number nRow -Row number
- * return Type : array lv_aTree
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_getTreePath(oElement,nRow)
- {
- var lv_aTree = new Array();
- lv_aTree[0] = nRow;
- var nPRow = oElement.getTreeParentRow(nRow);
- while (nPRow != -1)
- {
- lv_aTree[lv_aTree.length] = nPRow;
- nPRow = oElement.getTreeParentRow(nPRow);
- }
- return lv_aTree;
- }
- /************************************************************************************************
- * 함수명 : grdf_getFirstCell
- * 설명 : 첫번째 cell
- * argument : Object objGrd - grid
- * return Type : obj
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_getFirstCell( objGrd ) {
- var bindDs = eval(objGrd.binddataset);
- if(objGrd.selecttype == "multiarea" || objGrd.selecttype == "area" ) {
- var lv_nAreaStartRow = parseInt(objGrd.selectstartrow);
- var lv_nAreaStartCol = parseInt(objGrd.selectstartcol);
- } else {
- var lv_nAreaStartRow = parseInt(objGrd.selectstartrow);
- var lv_nAreaStartCol = parseInt(objGrd.selectstartcol);
- }
-
- var obj = new Object();
- if(lv_nAreaStartCol == -1) lv_nAreaStartCol = 0;
- obj.col = lv_nAreaStartCol;
- obj.row = lv_nAreaStartRow;
-
- return obj;
- }
- /************************************************************************************************
- * 함수명 : grdf_getLastCell
- * 설명 : 마지막 cell
- * argument : Object objGrd - grid
- * return Type : tmpCell
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_getLastCell( objGrd ) {
-
- var bindDs = eval(objGrd.binddataset);
- if(objGrd.selecttype == "multiarea" || objGrd.selecttype == "area" || objGrd.selecttype == "cell") {
- var lv_nAreaEndRow = parseInt(objGrd.selectendrow);
- var lv_nAreaEndCol = parseInt(objGrd.selectendcol);
- } else {
- var lv_nAreaEndRow = parseInt(objGrd.selectendrow);
- var lv_nAreaEndCol = objGrd.getCellCount("body") - 1;
- }
-
- var obj = new Object();
- if(lv_nAreaEndCol == -1) lv_nAreaEndCol = 0;
- obj.col = lv_nAreaEndCol;
- obj.row = lv_nAreaEndRow;
-
-
- return obj;
- }
- /************************************************************************************************
- * 함수명 : grdf_exportExcel
- * 설명 : Export Grid to Excel
- * argument : objGrid Dataset Object
- sFileName Excel File Name
- sSheetName Excel Sheet Name
- sOpt filename modity true/false(true : 원래 파일명 , false : 원래 파일명에 "_년월일시분초"를 추가한 파일명
- sFilePath file path
- sfileOpen String FileOpen (default:none) (open:엑셀오픈, none:엑셀오픈안함, user:엑셀오픈여부선택)
- bRemove size 0 인 Cell을 숨기기로 보여줄것인지 아니면 삭제하여 보여줄것인지의 여부
- true : 숨기기
- false : 삭제 (default)
- sStyle strExceptStyle( color, background, font, align, wordwrap 적용하지 않을 항목 ',' 로 복수 나열)
- bNoLog 엑셀 다운로드시 로그를 남기지 않도록 함 (true : 로그 남기지 않음)
- * return Type : none
- * 작성자 : tobesoft
- ex)grdf_exportExcel(Grid04, "exportExcel", "see"); //파일 다이얼로그로 저장위치 저장
- grdf_exportExcel(Grid04, "exportExcel", "see", false, "" ,"user"); //파일 다이얼로그로 저장위치 저장(파일 바로오픈)
- grdf_exportExcel(Grid04, "testFile", "see",false,"C:\\"); //파일 path로 저장
- grdf_exportExcel(Grid04, "testFile", "see",false,"C:\\","user",true); //파일 path로 저장(파일 바로오픈) ,size 0 인 셀 숨기기로 표현
- ************************************************************************************************/
- var iv_sFilePath;
- var lv_VirtualFile = new VirtualFile(); // 엑셀 파일 저장시 삭제용 VirtualFile Object
- function grdf_exportExcel(objGrid, strFileName, strSheetName, sOpt, sFilePath, sfileOpen, bRemove, sStyle, bNoLog)
- {
- // 엑셀 다운로드시 objGrid에 Dataset등 다른 컴포넌트때문에 오류 발생시 리턴.
- if(objGrid.toString() != '[object Grid]')
- {
- return application.alert('Grid Component가 없습니다.');
- }
-
- if (lv_VirtualFile != null)
- {
- // 기 존재하는 파일 삭제
- if (lv_VirtualFile.open(VirtualFile.openRead))
- {
- VirtualFile.delete(lv_VirtualFile);
- lv_VirtualFile.close();
- lv_VirtualFile = null;
- }
- }
-
- //저장모드 여부
- var bSave = true;
- if(utlf_isNull(bSave))
- {
- bSave = true;
- }
-
- //fileopen 여부
- if(utlf_isNull(sfileOpen)){
- sfileOpen = "none";
- }else{
- sfileOpen = String(sfileOpen).toUpperCase();
- }
-
- //Cell Size 0인것을 숨길것인지 삭제할것인지에 대한여부
- if(utlf_isNull(bRemove))
- {
- bRemove = false;
- }
-
- // strExceptStyle 초기화
- if(utlf_isNull(sStyle) || (!utlf_isNull(sStyle)
- && sStyle.indexOf("color") == -1
- && sStyle.indexOf("background") == -1
- && sStyle.indexOf("font") == -1
- && sStyle.indexOf("align") == -1
- && sStyle.indexOf("wordwrap") == -1) ){
- sStyle = "";
- }
-
-
- //trace("sfileOpen::" + sfileOpen);
- // Excel File명에 시간정보를 추가하여 중복되지 않게 한다.
- if(sOpt) //파일명 변경 안함
- {
- strFileName = strFileName ;
- }
- else //파일명에 시간 붙여서 파일명 생성
- {
- var to_day = new Date();
- //strFileName = strFileName + "_" + to_day.getTime();
- var strToday = to_day.getFullYear() + "";
- strToday += utlf_right("0" + (to_day.getMonth() + 1), 2);
- strToday += utlf_right("0" + to_day.getDate(), 2);
- strToday += utlf_right("0" + to_day.getHours(), 2);
- strToday += utlf_right("0" + to_day.getMinutes(), 2);
- strToday += utlf_right("0" + to_day.getSeconds(), 2);
- //var nHours = to_day.getHours();
- //var nMinutes = to_day.getMinutes();
- //var nSeconds = to_day.getSeconds();
- //strFileName = strFileName + "_" + utlf_today() + "" + nHours + "" + nMinutes + "" + nSeconds;
- strFileName = strFileName + "_" + strToday ;
- }
-
-
- // 1000건 이상의 데이터를 엑셀 다운로드 할 경우 사유를 입력 받고 보안로그에 저장
- var reason;
- var downloadcount = objGrid.rowcount;
-
- if(bNoLog != true) {
- var dutplceinstcd = sysf_getUserInfo("dutplceinstcd");
- if(downloadcount >= 1000 && dutplceinstcd != "033") { // 대량다운로드 사유 입력
- reason = frmf_modal("SPZSE00100", "SPZSE00100", null, null, null, null, null, null, null, null, null, null, "M");
-
- if(utlf_isNull(reason)) {
- return;
- }
- }
- }
-
- // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
- if (bSave && utlf_isNull(sFilePath))
- {
- var fd = new FileDialog();
- var vFile_down = fd.open("Excel Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
- if (utlf_isNull(vFile_down))
- {
- return;
- }
-
- strFileName = vFile_down.filename;
- }
-
- //그리드를 엑셀로 만드는 동안 Loading Image가 보이게 한다.
- this.setWaitCursor(true,true);
- var objExport = new ExportObject();
- objExport.exporttype = ExportTypes.EXCEL;
- objExport.activepagename = strSheetName;
- if(bSave)
- {
- objExport.exportopenmode = "overwrite"; // existopen, overwrite, noopen
- objExport.exportsavemode = "save"; // save, nosave
- objExport.exportactivemode = "noactive";
- }
- else
- {
- objExport.exportopenmode = "noopen"; // existopen, overwrite, noopen
- objExport.exportsavemode = "nosave"; // save, nosave
- objExport.exportactivemode = "active";
- }
-
- objExport.exportfilename = strFileName.replace(".xlsx","")+".xlsx";
- // 칼럼 0번째 expr로 체크박스 여부 판단.
- var strExpr = objGrid.getCellProperty("body",0,"expr");
- var strText = objGrid.getCellProperty("body",0,"text");
- var strDispalyType = objGrid.getCellProperty("body",0,"displaytype");
- // 그리드에서 checkbox 속성을 스크립트(array)로 바인딩 시킨 경우 엑셀 export시 칼럼을 제외시킴
- if(strExpr=="expr:v_ChkGrdList[currow]" || strText=="expr:v_ChkGrdList[currow]" ||strDispalyType =="checkbox" || strDispalyType =="image" ) // 체크박스 제거 후 export
- {
- //1. 탬프그리드 생성.
- var objGridTemp = new Grid("grd_temp", 0, 100, 100, 200);
- this.addChild("grd_temp", objGridTemp);
- //2. 원본 그리드 포맷 카피.
- //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
- var fomat = '<Formats>';
- fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
- fomat += '</Formats>';
- objGridTemp.formats = fomat;
- // 칼럼사이즈 처리
- //trace("ColCount::"+objNewGrid.getCellCount("body"));
- for(var i=0;i<objGridTemp.getCellCount("body");i++)
- {
- var nRow = objGrid.getCellProperty("body", i, "row");
- if(nRow == 0) {
- var norgColSize = objGrid.getRealColSize(i);
- objGridTemp.setFormatColProperty(i,"size", norgColSize);
- }
- }
-
- //size 0 제거
- if(bRemove == false){
- for(var i=(objGrid.getCellCount("Head")-1);i>=0;i--)
- {
- var nRow = objGrid.getCellProperty("Head", i, "row");
- var nCol = objGrid.getCellProperty("Head", i, "col");
- var nColSpan = objGrid.getCellProperty("Head", i, "colspan");
- var nSize = objGrid.getRealColSize(nCol);
- var sTitleText = objGrid.getCellProperty("head", i, "text");
- var sColType = objGrid.getCellProperty("head", i, "displaytype");
-
- //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
- if(nRow == 0 && nSize == 0) {
- if(nColSpan == 1) {
- //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", nCol, false);
- } else {
- for(var j=(nCol+nColSpan-1);j>=nCol;j--)
- {
- //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", j, false);
- }
- }
- }
- }
- }
-
- //3. 체크박스 제거(0번째 칼럼)
- objGridTemp.deleteContentsCol(0);
- //4. Dataset동적 바인딩.
- objGridTemp.binddataset = objGrid.binddataset;
- //5. 그리드 visible: false, show()
- objGridTemp.visible = false;
- objGridTemp.show();
- objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, strSheetName + "!A1", "", "", "", "", "", sStyle);
- objExport.export();
- objExport = null;
-
- //6. temp그리드 삭제.
- this.removeChild("grd_temp");
- objGridTemp.destroy();
- objGridTemp = null;
-
- } else { // Grid원본 export
-
- //1. 탬프그리드 생성.
- var objGridTemp = new Grid("grd_temp", 0, 100, 100, 200);
- this.addChild("grd_temp", objGridTemp);
- //2. 원본 그리드 포맷 카피.
- //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
- var fomat = '<Formats>';
- fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
- fomat += '</Formats>';
- objGridTemp.formats = fomat;
- // 칼럼사이즈 처리
- //trace("ColCount::"+objNewGrid.getCellCount("body"));
- for(var i=0;i<objGridTemp.getCellCount("body");i++)
- {
- var nRow = objGrid.getCellProperty("body", i, "row");
- if(nRow == 0) {
- var norgColSize = objGrid.getRealColSize(i);
- objGridTemp.setFormatColProperty(i,"size", norgColSize);
- }
- }
-
- //size 0 제거
- if(bRemove == false){
- for(var i=(objGrid.getCellCount("Head")-1);i>=0;i--)
- {
- var nRow = objGrid.getCellProperty("Head", i, "row");
- var nCol = objGrid.getCellProperty("Head", i, "col");
- var nColSpan = objGrid.getCellProperty("Head", i, "colspan");
- var nSize = objGrid.getRealColSize(nCol);
- var sTitleText = objGrid.getCellProperty("head", i, "text");
- var sColType = objGrid.getCellProperty("head", i, "displaytype");
-
- //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
- if(nRow == 0 && nSize == 0) {
- if(nColSpan == 1) {
- //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", nCol, false);
- } else {
- for(var j=(nCol+nColSpan-1);j>=nCol;j--)
- {
- //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", j, false);
- }
- }
- }
- }
- }
-
- //4. Dataset동적 바인딩.
- objGridTemp.binddataset = objGrid.binddataset;
- //5. 그리드 visible: false, show()
- objGridTemp.visible = false;
- objGridTemp.show();
- objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, strSheetName + "!A1", "", "", "", "", "", sStyle);
-
- objExport.export();
- objExport = null;
-
- //6. temp그리드 삭제.
- this.removeChild("grd_temp");
- objGridTemp.destroy();
- objGridTemp = null;
- }
-
- var exeFileNM;
-
- if (bSave)
- {
- // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
- var objExtCommon = new ExtCommon();
- var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
- var newFilePath;
-
- if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
- {
- newFilePath = sFilePath + strFileName.replace(".xlsx","") + ".xlsx";
- }
- else
- {
- var sFile = vFile_down.fullpath;
- newFilePath = sFile.replace(".xlsx","") + ".xlsx";
- }
-
- if(preFilePath == newFilePath) {
- exeFileNM = preFilePath;
- } else {
- if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
- var rtn = objExtCommon.MoveFile(preFilePath, newFilePath, false);
- exeFileNM = newFilePath;
- }
- }else{
- var objExtCommon = new ExtCommon();
- var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
- exeFileNM = preFilePath;
- }
-
- // 여기까지 왔으면 엑셀 저장은 완료된 것으로 보고 엑셀 저장에 대한 보안로그 남김
- if(bNoLog != true) {
- dsf_createDsRow("ds_exceldownload_log", [{col:"scrncd", type:"string", size:256, val:frmf_getScreenID()}
- , {col:"reason", type:"string", size:256, val:reason}
- , {col:"downloadcount", type:"string", size:256, val:downloadcount}]);
-
- var oParam = {};
- oParam.id = "TXZSE00300";
- oParam.service = "securityapp.SecurityLoggingMngt";
- oParam.method = "reqSetSecurityLog";
- oParam.inds = "req=" + "ds_exceldownload_log";
- oParam.async = true;
- tranf_submit(oParam);
- }
-
- if(sfileOpen == "OPEN"){
- //EXCEL에서 열기
- objExtCommon.executeProcess(exeFileNM, "","");
- }else if(sfileOpen == "USER"){
- var bOK;
- bOK = confirm( "엑셀을 열어보시겠습니까?", "확인", "question");
-
- if(bOK){
- objExtCommon.executeProcess(exeFileNM, "","");
- }
- }
-
- this.setWaitCursor(false,true);
- }
- /************************************************************************************************
- * 함수명 : grdf_exportExcelMulti
- * 설명 : Export Grid to Excel
- * argument : objGrid Grid String Object
- sFileName Excel File Name
- sSheetName Excel Sheet String Name
- sOpt filename modity true/false(true : 원래 파일명 , false : 원래 파일명에 "_년월일시분초"를 추가한 파일명
- sFilePath file path
- sfileOpen String FileOpen (default:none) (open:엑셀오픈, none:엑셀오픈안함, user:엑셀오픈여부선택)
- bRemove size 0 인 Cell을 숨기기로 보여줄것인지 아니면 삭제하여 보여줄것인지의 여부
- true : 숨기기
- false : 삭제 (default)
- * return Type : none
- * 작성자 : tobesoft
- ex) var sGrd = "Grid00,Div00.Grid01";
- var sSheet = "GridSheetTest,GridSheetTest2";
- grdf_exportExcelMulti(sGrd, "exportExcel", sSheet); //파일 다이얼로그로 저장위치 저장
- grdf_exportExcelMulti(sGrd, "exportExcel", sSheet,"true,"","USER"); //파일 다이얼로그로 저장위치 저장
- grdf_exportExcelMulti(sGrd, "exportExcel", sSheet,false,"C:\\aaa\\");
- grdf_exportExcelMulti(sGrd, "exportExcel", sSheet,false,"C:\\aaa\\","user",true);
- ************************************************************************************************/
- function grdf_exportExcelMulti(sObjGrid, strFileName, strSheetName, sOpt, sFilePath, sfileOpen, bRemove)
- {
- var aGrid = sObjGrid.split(",");
- var aSheet = strSheetName.split(",");
- var bTemp = false;
- if (lv_VirtualFile != null)
- {
- // 기 존재하는 파일 삭제
- if (lv_VirtualFile.open(VirtualFile.openRead))
- {
- VirtualFile.delete(lv_VirtualFile);
- lv_VirtualFile.close();
- lv_VirtualFile = null;
- }
- }
- //저장모드 여부
- var bSave = true;
- if(utlf_isNull(bSave))
- {
- bSave = true;
- }
-
- //Cell Size 0인것을 숨길것인지 삭제할것인지에 대한여부
- if(utlf_isNull(bRemove))
- {
- bRemove = false;
- }
-
- //fileopen 여부
- if(utlf_isNull(sfileOpen)){
- sfileOpen = "none";
- }else{
- sfileOpen = String(sfileOpen).toUpperCase();
- }
-
- // Excel File명에 시간정보를 추가하여 중복되지 않게 한다.
- if(sOpt) //파일명 변경 안함
- {
- strFileName = strFileName ;
- }
- else //파일명에 시간 붙여서 파일명 생성
- {
- var to_day = new Date();
- var strToday = to_day.getFullYear() + "";
- strToday += utlf_right("0" + (to_day.getMonth() + 1), 2);
- strToday += utlf_right("0" + to_day.getDate(), 2);
- strToday += utlf_right("0" + to_day.getHours(), 2);
- strToday += utlf_right("0" + to_day.getMinutes(), 2);
- strToday += utlf_right("0" + to_day.getSeconds(), 2);
- strFileName = strFileName + "_" + strToday ;
- }
-
- // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
- if (bSave && utlf_isNull(sFilePath))
- {
- var fd = new FileDialog();
- var vFile_down = fd.open("Excel Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
- if (utlf_isNull(vFile_down))
- {
- return;
- }
- strFileName = vFile_down.filename;
- }
-
- var objExport = new ExportObject();
- objExport.exporttype = ExportTypes.EXCEL;
-
- if(bSave)
- {
- objExport.exportopenmode = "overwrite"; // existopen, overwrite, noopen
- objExport.exportsavemode = "save"; // save, nosave
- objExport.exportactivemode = "noactive";
- }
- else
- {
- objExport.exportopenmode = "noopen"; // existopen, overwrite, noopen
- objExport.exportsavemode = "nosave"; // save, nosave
- objExport.exportactivemode = "active";
- }
-
- objExport.exportfilename = strFileName.replace(".xlsx","")+".xlsx";
- var grdCnt = 0;
- for(var i=0; i<aGrid.length; i++){
-
- objGrid = eval(aGrid[i]);
-
- // 엑셀 다운로드시 objGrid에 Dataset등 다른 컴포넌트때문에 오류 발생시 리턴.
- if(objGrid.toString() != '[object Grid]')
- {
- return application.alert('Grid Component가 없습니다.');
- }
-
- // 칼럼 0번째 expr로 체크박스 여부 판단.
- var strExpr = objGrid.getCellProperty("body",0,"expr");
- var strText = objGrid.getCellProperty("body",0,"text");
- var strDispalyType = objGrid.getCellProperty("body",0,"displaytype");
- // 그리드에서 checkbox 속성을 스크립트(array)로 바인딩 시킨 경우 엑셀 export시 칼럼을 제외시킴
- if(strExpr=="expr:v_ChkGrdList[currow]" || strText=="expr:v_ChkGrdList[currow]" ||strDispalyType =="checkbox" || strDispalyType =="image" ) // 체크박스 제거 후 export
- {
- //1. 탬프그리드 생성.
- var objGridTemp = new Grid("grd_temp"+String(grdCnt), 0, 100, 100, 200);
- this.addChild("grd_temp"+String(grdCnt), objGridTemp);
- grdCnt++;
-
- //trace(objGridTemp.name);
- //2. 원본 그리드 포맷 카피.
- //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
- var fomat = '<Formats>';
- fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
- fomat += '</Formats>';
- objGridTemp.formats = fomat;
-
- // 칼럼사이즈 처리
- //trace("ColCount::"+objNewGrid.getCellCount("body"));
- for(var ii=0;ii<objGridTemp.getCellCount("body");ii++)
- {
- var nRow = objGrid.getCellProperty("body", ii, "row");
- if(nRow == 0) {
- var norgColSize = objGrid.getRealColSize(ii);
- objGridTemp.setFormatColProperty(ii,"size", norgColSize);
- }
- }
-
- //size 0 제거
- if(bRemove == false){
- for(var removeRow=(objGrid.getCellCount("Head")-1);removeRow>=0;removeRow--)
- {
- var nRow = objGrid.getCellProperty("Head", removeRow, "row");
- var nCol = objGrid.getCellProperty("Head", removeRow, "col");
- var nColSpan = objGrid.getCellProperty("Head", removeRow, "colspan");
- var nSize = objGrid.getRealColSize(nCol);
- var sTitleText = objGrid.getCellProperty("head", removeRow, "text");
- var sColType = objGrid.getCellProperty("head", removeRow, "displaytype");
-
- //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
- if(nRow == 0 && nSize == 0) {
- if(nColSpan == 1) {
- //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", nCol, false);
- } else {
- for(var j=(nCol+nColSpan-1);j>=nCol;j--)
- {
- //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", j, false);
- }
- }
- }
- }
- }
- //3. 체크박스 제거(0번째 칼럼)
- objGridTemp.deleteContentsCol(0);
- //objGridTemp.deleteContentsCol("body", 0,false);
-
- //4. Dataset동적 바인딩.
- objGridTemp.binddataset = objGrid.binddataset;
- //5. 그리드 visible: false, show()
- objGridTemp.visible = false;
- objGridTemp.show();
- objExport.activepagename = aSheet[i];
- objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, aSheet[i] + "!A1");
- }
- else
- {
- // Grid원본 export
- //1. 탬프그리드 생성.
- var objGridTemp = new Grid("grd_temp"+String(grdCnt), 0, 100, 100, 200);
- this.addChild("grd_temp"+String(grdCnt), objGridTemp);
- grdCnt++;
-
- //2. 원본 그리드 포맷 카피.
- //band="left" 일경우 첫번째 col이 삭제가 안되어서 body로 xml을 변경함
- var fomat = '<Formats>';
- fomat += objGrid.getCurFormatString().replace('band="left"', 'band="body"');
- fomat += '</Formats>';
- objGridTemp.formats = fomat;
- // 칼럼사이즈 처리
- //trace("ColCount::"+objNewGrid.getCellCount("body"));
- for(var ii=0;ii<objGridTemp.getCellCount("body");ii++)
- {
- var nRow = objGrid.getCellProperty("body", ii, "row");
- if(nRow == 0) {
- var norgColSize = objGrid.getRealColSize(ii);
- objGridTemp.setFormatColProperty(ii,"size", norgColSize);
- }
- }
-
- //size 0 제거
- if(bRemove == false){
- for(var removeRow=(objGrid.getCellCount("Head")-1);removeRow>=0;removeRow--)
- {
- var nRow = objGrid.getCellProperty("Head", removeRow, "row");
- var nCol = objGrid.getCellProperty("Head", removeRow, "col");
- var nColSpan = objGrid.getCellProperty("Head", removeRow, "colspan");
- var nSize = objGrid.getRealColSize(nCol);
- var sTitleText = objGrid.getCellProperty("head", removeRow, "text");
- var sColType = objGrid.getCellProperty("head", removeRow, "displaytype");
-
- //trace("nRow::" +nRow + " nCol::" +nCol + " nSize::" + nSize);
- if(nRow == 0 && nSize == 0) {
- if(nColSpan == 1) {
- //trace("nCol::"+nCol + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", nCol, false);
- } else {
- for(var j=(nCol+nColSpan-1);j>=nCol;j--)
- {
- //trace("j::"+j + " sTitleText::" + sTitleText + " nSize::" + nSize);
- objGridTemp.deleteContentsCol("body", j, false);
- }
- }
- }
- }
- }
-
- //4. Dataset동적 바인딩.
- objGridTemp.binddataset = objGrid.binddataset;
- //5. 그리드 visible: false, show()
- objGridTemp.visible = false;
- objGridTemp.show();
-
- objExport.activepagename = aSheet[i];
- objExport.addExportItem(ExportItemTypes.GRID, objGridTemp, aSheet[i] + "!A1");
- }
- }
-
- objExport.exportmessageprocess = "%d 항목을 출력중입니다. %d/%d";
- objExport.exporteventtype = "itemrecord";
- objExport.exportuitype = "exportprogress";
- objExport.export();
- objExport = null;
-
- //if(bTemp){
- //trace(grdCnt);
- if(grdCnt>0){
- for(var i=0; i<grdCnt; i++){
- //6. temp그리드 삭제.
- var objGridTemp2 = eval("grd_temp"+String(i));
- this.removeChild("grd_temp"+String(i));
- objGridTemp2.destroy();
- objGridTemp2 = null;
- }
- }else{
- //6. temp그리드 삭제.
- var objGridTemp2 = eval("grd_temp0");
- this.removeChild("grd_temp0");
- objGridTemp2.destroy();
- objGridTemp2 = null;
- }
- //}
-
- var exeFileNM;
- if (bSave)
- {
- // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
- var objExtCommon = new ExtCommon();
- var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
- var newFilePath;
-
- if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
- {
- newFilePath = sFilePath + strFileName.replace(".xlsx","") + ".xlsx";
- }
- else
- {
- var sFile = vFile_down.fullpath;
- newFilePath = sFile.replace(".xlsx","") + ".xlsx";
- }
- //trace(preFilePath +"::" +newFilePath);
- if(preFilePath == newFilePath) {
- exeFileNM = preFilePath;
- } else {
- if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
- var rtn = objExtCommon.MoveFile(preFilePath, newFilePath, false);
- exeFileNM = newFilePath;
- }
- }else{
- var objExtCommon = new ExtCommon();
- var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- var preFilePath = userHomeDir + strFileName.replace(".xlsx","") + ".xlsx";
- exeFileNM = preFilePath;
- }
-
- if(sfileOpen == "OPEN"){
- //EXCEL에서 열기
- objExtCommon.executeProcess(exeFileNM, "","");
- }else if(sfileOpen == "USER"){
- var bOK;
- bOK = confirm( "확인", "엑셀을 열어보시겠습니까?", "question");
- if(bOK){
- objExtCommon.executeProcess(exeFileNM, "","");
- }
- }
- }
- /************************************************************************************************
- * 함수명 : grdf_OnExport (삭제 예정)
- * 설명 : Exprting Progressbar
- * argument : obj ExportObject
- e Event
- * return Type : none
- * 작성자 : tobesoft
- ************************************************************************************************/
- // function grdf_OnExport(obj:ExportObject, e:ExportEventInfo)
- // {
- // //obj.exportmessageprocess = "%d Item is exprting %d/%d";
- // }
- /************************************************************************************************
- * 함수명 : grdf_exportCsv
- * 설명 : Export Grid to CSV
- * argument : objGrid Grid Object
- sFileName File Name
- sFilePath file path
- sfileOpen String FileOpen (default:none) (open:엑셀오픈, none:엑셀오픈안함, user:엑셀오픈여부선택)
- * return Type : none
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_exportCsv(objGrid, sFileName, sFilePath, sfileOpen)
- {
- var strValue = "";
- var objDs = eval(objGrid.binddataset);
-
- if(utlf_isNull(sFileName)){
- sFileName = objGrid.name + "_temp";
- }
-
- //fileopen 여부
- if(utlf_isNull(sfileOpen)){
- sfileOpen = "none";
- }else{
- sfileOpen = String(sfileOpen).toUpperCase();
- }
-
- var strFileName = sFileName+".csv";
-
- // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
- if (utlf_isNull(sFilePath))
- {
- var fd = new FileDialog();
- var vFile_down = fd.open("Excel Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
- if (utlf_isNull(vFile_down))
- {
- return;
- }
-
- strFileName = vFile_down.fullpath;
- var newFilePath;
- }else{
-
- // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
- var objExtCommon = new ExtCommon();
- var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- strFileName = userHomeDir + strFileName.replace(".csv","") + ".csv";
- var newFilePath;
- }
-
- //쉼표로 구분자를 준 CSV 형식의 그리드 데이터
- strValue = objGrid.getCsvData();
-
- var vfile = new VirtualFile();
-
- var to_day = new Date();
-
- //var sNewFileName = sFileName+".csv";
- vfile.open(strFileName, VirtualFile.openWrite | VirtualFile.openText);
- vfile.write(strValue, "urf-8");
-
- var path = vfile.fullpath;
-
- vfile.close();
- vfile = null;
- if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
- {
- newFilePath = sFilePath + sFileName.replace(".csv","") + ".csv";
- var rtn = objExtCommon.MoveFile(path, newFilePath, false);
- exeFileNM = newFilePath;
-
- path = newFilePath;
- }
- var objExtCommon = new ExtCommon();
- var exeExcelPath = objExtCommon.regGetValue("HKEY_CLASSES_ROOT", "CLSID\\{00020820-0000-0000-C000-000000000046}\\LocalServer32\\", "", "S");
- //exeExcelPath : excel exe path
- var arrExcelPath = exeExcelPath.split("\\");
- exeFileNM = arrExcelPath[arrExcelPath.length-1];
-
- if(sfileOpen == "OPEN"){
- //EXCEL에서 열기
- objExtCommon.executeProcess(exeFileNM, "\"" + path + "\"", exeExcelPath.replace(exeFileNM,""));
- }else if(sfileOpen == "USER"){
- var bOK;
- bOK = confirm( "확인", "엑셀을 열어보시겠습니까?", "question");
-
- if(bOK){
- objExtCommon.executeProcess(exeFileNM, "\"" + path + "\"", exeExcelPath.replace(exeFileNM,""));
- }
- }
- }
- /************************************************************************************************
- * 함수명 : grdf_exportTxt
- * 설명 : Export Grid to TXT
- * argument : objGrid Grid Object
- sFileName File Name
- * return Type : none
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_exportTxt(objGrid, sFileName, sFilePath, sfileOpen)
- {
- var strValue = "";
- var objDs = eval(objGrid.binddataset);
-
- //fileopen 여부
- if(utlf_isNull(sfileOpen)){
- sfileOpen = "none";
- }else{
- sfileOpen = String(sfileOpen).toUpperCase();
- }
-
- var strFileName = sFileName+".txt";
- var newFilePath;
- var preFilePath;
- var objExtCommon = new ExtCommon();
-
- // 저장이면 파일 다이얼로그를 통하여 저장 경로를 선택한다.
- if (utlf_isNull(sFilePath))
- {
- var fd = new FileDialog();
- var vFile_down = fd.open("Txt Export", FileDialog.SAVE ,"%MYDOCUMENT%", strFileName);
- if (utlf_isNull(vFile_down))
- {
- return;
- }
-
- strFileName = vFile_down.fullpath;
-
- }else{
-
- // export 시 내문서로 저장이 되기 때문에 파일 이동을 한다.
-
- var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- strFileName = userHomeDir + strFileName.replace(".txt","") + ".txt";
- preFilePath = strFileName;
-
- }
-
-
- //쉼표로 구분자를 준 TXT 형식의 그리드 데이터
- strValue = objGrid.getCsvData();
-
- var vfile = new VirtualFile();
-
- var to_day = new Date();
-
- var sTxt;
- sTxt = strValue.replace(String.fromCharCode(10),",'"+"\r\n");
- sTxt = sTxt.replace('"','');
- vfile.open(strFileName, VirtualFile.openWrite | VirtualFile.openText);
- var bSuccess2 = vfile.write(sTxt, "utf-8");
- var bSuccess3 = vfile.close();
-
- var path = vfile.fullpath;
-
-
- vfile.close();
- vfile = null;
- var exeFileNM;
- if(!utlf_isNull(sFilePath)) //파일경로가 입력 되었을 경우
- {
- newFilePath = sFilePath + sFileName.replace(".txt","") + ".txt";
- if(objExtCommon.IsFileExist(newFilePath)) objExtCommon.DeleteFile(newFilePath);
- var rtn = objExtCommon.MoveFile(preFilePath, newFilePath, false);
- exeFileNM = newFilePath;
- }else{
- // var objExtCommon = new ExtCommon();
- // var userHomeDir = system.convertRealPath("%MYDOCUMENT%");
- // var preFilePath = userHomeDir + strFileName.replace(".txt","") + ".txt";
- exeFileNM = strFileName;
- }
-
- if(sfileOpen == "OPEN"){
- objExtCommon.executeProcess(exeFileNM, "","");
- }else if(sfileOpen == "USER"){
- var bOK;
- bOK = confirm( "확인", "TXT파일을 열어보시겠습니까?", "question");
-
- if(bOK){
- objExtCommon.executeProcess(exeFileNM, "","");
- }
- }
- }
- /************************************************************************************************
- * 함수명 : grdf_ImportExcel
- * 설명 : Import Excel to Grid
- * argument : sDsName Dataset Name
- nStartRow Import start Row
- objGrd Grid Object
- objGrd가 있으면 그리드를 기준으로 그리드에 보이는 셀과 binding된column에만 데이터가 들어감
- nStartCol 그리드를 기준의 col index default 1
- bDsClear 업로드하는 그리드 clear여부
- * return Type : none
- * 작성자 : tobesoft
- ************************************************************************************************/
- function grdf_ImportExcel(sDsName, nStartRow, objGrd, nStartCol, bDsClear)
- {
- var fd = new FileDialog;
- var objExt = new ExtCommon();
- var file = fd.open("open", FileDialog.LOAD,"%MYDOCUMENT%");
- var lv_oDs;
- var lv_sDsNm = "ds_importExcel";
- var lv_Ret;
- var objDsImport = eval(sDsName);
-
- if( !utlf_isNull(bDsClear) && bDsClear == true ){
- objDsImport.clearData();
- }
-
- var lv_nStRow = 0;
- if(file != undefined){
- file.open(VirtualFile.openRead | VirtualFile.openBinary);
- file.close();
- }else{
- return false;
- }
- try{
- lv_oDs = this.all[lv_sDsNm];
- }catch(e){}
-
- if(utlf_isNull(nStartCol))
- {
- nStartCol = 0;
- }
-
- if(utlf_isNull(lv_oDs))
- {
- lv_oDs = new Dataset;
- lv_oDs.name = lv_sDsNm;
- this.addChild(lv_sDsNm,lv_oDs);
- }
-
- if(lv_oDs.rowcount > 0) lv_oDs.clear();
-
- if (objDsImport == null || objDsImport == undefined) return false;
- if (nStartRow == null || nStartRow == 0) nStartRow = 1;
- objExt.excelImportByIndex(file.fullpath, 0, lv_sDsNm, false, 1, 0, nStartRow);
- lv_nStRow = objDsImport.rowcount;
-
-
- var nRow;
- var k;
-
- if(utlf_isNull(objGrd))
- {
- for(var i=0; i < lv_oDs.getRowCount() ; i++ )
- {
- nRow = objDsImport.addRow();
- k=0;
- for(var j = 0; j <lv_oDs.getColCount(); j++)
- {
- objDsImport.setColumn(nRow, j, lv_oDs.getColumn(i,j));
- k++;
- }
- }
- }
- else
- {
- var nCellCnt = objGrd.getCellCount("Body");
- var sCellProp;
- var sCmbDs;
- var sBindCd;
- var sBindNm;
-
- for(var i=0; i < lv_oDs.getRowCount() ; i++ )
- {
- nRow = objDsImport.addRow();
- k = nStartCol;
- for(var j = nStartCol; j < nCellCnt; j++)
- {
- sCellProp = objGrd.getCellProperty("body", j, "text");
- if(!utlf_isNull(sCellProp)){
- var arrCellProp = sCellProp.split(":");
- if(arrCellProp[0] == "bind")
- {
- //combo일경우 맵핑 되어 있는 값을 넣도록 수정
- if(objGrd.getCellProperty("body", j, "displaytype") == "combo")
- {
- sCmbDs = objGrd.getCellProperty("body", j, "combodataset");
- sBindCd = objGrd.getCellProperty("body", j, "combocodecol");
- sBindNm = objGrd.getCellProperty("body", j, "combodatacol");
-
- var value = eval("this.objects[sCmbDs].lookup(sBindNm, lv_oDs.getColumn(i,k), sBindCd)");
- objDsImport.setColumn(nRow, arrCellProp[1], value);
- } else {
- objDsImport.setColumn(nRow, arrCellProp[1], lv_oDs.getColumn(i,k));
- }
- k++;
- }
- }
- }
- }
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_setColumn
- * 설명 : 그리드 컬럼 추가 / 제거
- * argument : Object objGrd - 그리드 오브젝트
- String sStatus - "I" / "D" ( I 추가, D 삭제)
- Number insertColIndex - insert 할 Column Index
- String colID - Column ID(추가시 필요한 인자)
- String sTitle - 헤더에 나올 텍스트(추가시 필요한 인자)
- String sDisplay - 그리드의 cell의 displaytype (추가시 필요한 인자)
- String sEdit - 그리드의 cell의 eidttype (추가시 필요한 인자)
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setColumn(objGrd, sStatus, insertColIndex, colID, sTitle, sDisplay, sEdit )
- {
-
- if(sStatus == "I")
- {
- objGrd.insertContentsCol("body", insertColIndex);
- objGrd.setCellProperty("Head", insertColIndex, "text", sTitle);
- objGrd.setCellProperty("body", insertColIndex, "text", "bind:"+colID);
- //objGrd.setCellProperty("body", insertColIndex, "text", "bind:"+colID);
- objGrd.setCellProperty("body", insertColIndex, "displaytype", sDisplay);
- objGrd.setCellProperty("body", insertColIndex, "displaytype", sEdit);
- }
- else
- {
- objGrd.deleteContentsCol(insertColIndex);
- }
- }
- /************************************************************************************************
- * 함수명 : grdf_setStatus
- * 인자 : Object objGrd - 그리드 오브젝트
- * String sStatus - 상태번호 (추가 : I, 수정 : U, 삭제 :D, 초기상태 : "")
- * Array arrRow - Array Row Index
- * 결과값 :
- * 함수설명 : 그리드 상태표시 값 변경
- ************************************************************************************************/
- function grdf_setStatus(objGrd, sStatus, arrRow)
- {
- var bindDs = eval(objGrd.binddataset);
- var updatecontrol = bindDs.updatecontrol;
-
- if(updatecontrol)
- bindDs.updatecontrol = false;
-
- if(utlf_isNull(arrRow)) {
- for(var i = 0; i < bindDs.rowcount; i++)
- bindDs.setRowType(i, sStatus);
- } else {
- for(var i = 0; i < arrRow.length; i++)
- bindDs.setRowType(arrRow[i], sStatus);
- }
-
- if(updatecontrol)
- bindDs.updatecontrol = true;
- }
- /**********************************************************************************
- * 함수명 : grdf_valueCheck ( -> frmf_chkMdtGrid )
- * 설명 : 입력된 그리드의 컬럼값 NULL CHECK
- * argument : Object objGrd - 그리드 오브젝트
- * return Type : return true/false
- * 작성자 : tobesoft
- ex) grdf_valueCheck(grid, "col1=타이틀1,col2=타이틀2")
- **********************************************************************************/
- // function grdf_valueCheck(objGrd:Grid, strColid)
- // {
- //
- // var objDS = eval(objGrd.binddataset);
- // var DS_COPY = new Dataset();
- // var objDs = objDS;
- // for(var i=0;i<objDS.getColCount();i++){
- // // 화면에서 넘겨받은 데이터셋의 컬럼수만큼 버퍼 데이터셋에 컬럼생성.
- // DS_COPY.addColumn(objDS.getColID(i),"STRING","120");
- // }
- //
- // var j = 0;
- // var relation = "";
- // for(var i=0; i<objDS.rowcount; i++){
- // // 화면에서 넘겨받은 데이터셋에 항목중 추가, 수정 된것.
- // if(objDS.getRowType(i) == "2" || objDS.getRowType(i) == "4"){
- // DS_COPY.addRow();
- // DS_COPY.copyRow(j,objDS,i);
- // relation = relation + i + ":" + j + ",";
- // j++;
- // }
- // }
- //
- // var objDS2 = DS_COPY;
- // var arrayRelation = relation.split(",");
- // var objArr1 = strColid.split(",");
- // var sTrimValue;
- // // 그리드에 존재하는 Row값만큼
- // for(var i=0; i<objDS2.getRowCount(); i++){
- // // 해당 폼에서 넘겨받은 strColid값의 갯수만큼
- // for(var j=0; j<objArr1.length; j++){
- // // Column ID와 Text값을분할
- // var objArr2 = objArr1[j].split("=");
- // for(var k=0; k<objDS2.getColCount(); k++){
- // if(objDS2.getColID(k) == objArr2[0]){
- // sTrimValue=objDS2.getColumn(i, k);
- // if(!utlf_isNull(sTrimValue))
- // {
- // sTrimValue=sTrimValue.trim();
- // }
- // if(utlf_isNull(sTrimValue)){
- // for(var l=0; l<arrayRelation.length; l++){
- // var arrRelation2 = arrayRelation[l].split(":");
- // if(i == arrRelation2[1]){
- // sysf_messageBox(objArr2[1] + "은(는)","I003");
- // // 값이 Null인 Cell에 focus.
- // objDs.rowposition = arrRelation2[0];
- // var nCellIdx = objGrd.getBindCellIndex("body", objArr2[0]);
- // objGrd.setCellPos(nCellIdx);
- // objGrd.showEditor(true);
- // return false;
- // }
- // }
- // }
- // }
- // }
- // }
- // }
- // return true;
- // }
- /**********************************************************************************
- * 함수명 : grdf_sortNodeList()
- * 설명 : 오름차순 내림차순 mode
- * argument : Object objDs - dataset
- String colID - Column ID
- String mode - 오른차순 내림차순 mode ("asc", "desc")
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_sortNodeList( objDs, colID, mode ) {
- if(objDs.getRowCount() == 0) return;
-
- var sMode = "+";
-
- if(mode == "desc") sMode = "-";
-
- // keystring 설정 전 초기화
- objDs.keystring = "";
- objDs.keystring = "S:"+sMode+colID;
-
- }
- /**********************************************************************************
- * 함수명 : grdf_initGrid()
- * 설명 : 그리드의 sort기능과 전체체크기능을 세텡한다.
- * argument : Object obj - grid object
- * isTF - "1.0" 파라미터를 넘겨주면 TF와 동일한 동작으로 sort 한다
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_initGrid(obj, isTF)
- {
- var lv_nCellCnt = obj.getCellCount("Head");
- var lv_sCellText = "";
- var lv_nChkCnt = 0;
- var lv_sDpType = "";
-
- if(isTF == "1.0") obj.tfmode = "Y";
-
- for(var i=0; i<lv_nCellCnt; i++)
- {
- lv_sCellText = obj.getCellText(-1,i);
- lv_sDpType = obj.getCellProperty("Head", i,"displaytype");
-
- if(lv_sDpType == "checkbox")
- {
- lv_sDpType = obj.setCellProperty("Head", i,"text","expr:0");
- lv_nChkCnt++;
- }
- }
-
- if(lv_nChkCnt > 0) obj.onheadclick.addHandler(grdf_setEventGrid);
-
- obj.onheadclick.addHandler(grdf_setEventGrid);
-
- }
- /**********************************************************************************
- * 함수명 : grdf_setEventGrid()
- * 설명 : 그리드의 sort기능과 전체체크 이벤트중 checkbox이면 전체 체크이벤트로 아니면 sort 이벤트로 분기한다.
- * argument : Object obj - grid object
- Object e - GridClickEventInfo object
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setEventGrid(obj:Grid, e:GridClickEventInfo)
- {
- if(e.row == -2) return;
-
- var v_strType=obj.getCellProperty("head",e.cell,"edittype");
- if(utlf_isNull(v_strType)) v_strType="none";
-
- var BodyColId = (obj.getCellProperty("body", e.col,"text")).toString().split(":"); // e.col : 바인드된 컬럼.
-
- var vCheckMergeCheck = false;
- if (BodyColId[0] == "bind") {
- //return false;
-
- var grdCellIdx = obj.getBindCellIndex("body",BodyColId[1]);
- var edittype = utlf_transNullToEmpty(obj.getCellProperty("body", grdCellIdx, "edittype"));
-
- if(edittype == "checkbox" || edittype.indexOf("checkbox") >-1) vCheckMergeCheck = true;
- }
-
- if((v_strType == "checkbox" || v_strType.indexOf("checkbox") >-1) && vCheckMergeCheck) //전체 체크
- {
- grdf_setGridCheckAll(obj, e);
- }
- else
- {
- if(obj.getCellProperty("head",e.cell,"displaytype") == "checkbox") return; // 헤더의 display가 checkbox 이면 리턴
- var nCol = obj.getCellProperty("head",e.cell, "col");
-
- if(obj.getCellProperty("body",nCol,"text") == null) return; // 컬럼정보가 없으면 리턴
- if(obj.getCellProperty("body",nCol,"text").indexOf("bind") < 0) return; // 바인드 정보가 아니면 리턴
-
- grdf_gridSort(obj, e);
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_setGridSort()
- * 설명 : Grid Sort기능 이벤트 추가
- * argument : Object obj - Grid Ojbect
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setGridSort(obj)
- {
- //헤더 클릭시 그리드 소트 적용
- obj.onheadclick.addHandler(grdf_gridSort);
- //obj.onheadclick.addHandler(grdf_setEventGrid);
- }
- /**********************************************************************************
- * 함수명 : grdf_gridSort()
- * 설명 : Grid Sort
- * argument : Object obj - Grid Ojbect
- Object e - event Ojbect
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- var CONST_ASC_MARK = "▲";
- var CONST_DESC_MARK = "▼";
- function grdf_gridSort(obj:Grid, e:GridClickEventInfo)
- {
- var bindDs = eval(obj.binddataset);
- if (bindDs.rowcount == 0) return false;
-
- var CONST_SORT_MARK = "";
-
- // 클릭한 위치 그 앞에까지 존재하는 서브셀의 갯수 만큼 e.cell 에 더 해주면 body 영역의 col 위치 값이 나올듯?
- var colspanHeadCnt = 0;
- var colspanBodyCnt = 0;
- var headCnt = 0;
- var bodyCnt = 0;
-
- for(var i = 0; i <= e.cell; i++) {
- headCnt = obj.getCellProperty("Head", i, "colspan");
- bodyCnt = obj.getCellProperty("body", i, "colspan");
-
- colspanHeadCnt += headCnt;
- colspanBodyCnt += bodyCnt;
- }
- var colspanCnt = colspanHeadCnt - colspanBodyCnt;
- // 선택한 컬럼의 head가 합쳐져 있고 body는 안합쳐져 있을 때는 body의 제일 앞 컬럼 기준으로 sort 하도록 수정
- if(headCnt > 1 && bodyCnt == 1) {
- colspanCnt = colspanCnt - headCnt + 1;
- }
- var sText = obj.getCellProperty("body", e.cell + colspanCnt, "text");
-
- if(utlf_isNull(sText)) return false;
-
- var BodyColId = sText.split(":"); // e.col : 바인드된 컬럼.
- if (BodyColId[0] != "bind") {
- return false;
- }
-
- //for (var i = 0; i < obj.getCellCount("head"); i++) {
- if(obj.getCellText(-1, e.cell) == "undefined")
- return;
- //continue;
-
- var strHeadText = obj.getCellText(-1, e.cell);
- // tfmode 일때는 TF와 동일하게 두 개 컬럼까지만 연속 정렬되고 세개째부터는 다시 한개만 정렬되도록 함
- if(obj.tfmode == "Y") {
- var sameCnt = 0;
-
- for (var i = 0; i < obj.getCellCount("head"); i++) {
- if(i == e.cell) continue;
-
- var tempStrHeadText = obj.getCellText(-1, i);
- var status = tempStrHeadText.substr(tempStrHeadText.length - 1);
-
- if(status == CONST_DESC_MARK || status == CONST_ASC_MARK)
- {
- if(++sameCnt > 1) { // 기존에 2개가 있다면 초기화 하고 다시 한개만
- //초기화
- grdf_clearSort(obj);
- }
- }
- }
- }
-
-
- //if(i == e.cell) {
- var keystring = bindDs.keystring;
- var sortcolumns = "";
-
- if(!utlf_isNull(keystring)) {
- keystring = keystring.toString();
- var isGroup = keystring.indexOf("G:");
- if(isGroup > -1) return;
-
- keystring = keystring.replace(/undefined/g, "");
-
- if(keystring != "S:") {
- var nStart = keystring.indexOf("S:");
- sortcolumns = keystring.substring(nStart + 2, keystring.length);
-
- var nS = sortcolumns.indexOf(BodyColId[1]); // keystring에 이미 들어가 있는 컬럼이면 먼저 제거 해준다.
- if( nS > -1) {
- //sysf_trace("1 : " + sortcolumns + ", " + sortcolumns.substring(0, nS) + ", " + sortcolumns.substring(nS, sortcolumns.length));
- sortcolumns = sortcolumns.substring(0, nS - 1) + sortcolumns.substring(nS, sortcolumns.length); // '+', '-' 제거
- sortcolumns = sortcolumns.replace(BodyColId[1], ""); // 기존에 있는 컬럼명 제거
- }
- }
- }
-
- if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK) {
- obj.setCellProperty( "head", e.cell, "text", strHeadText.substr(0, strHeadText.length - 2) + " " + CONST_DESC_MARK);
- bindDs.keystring = "S:" + "-" + BodyColId[1] + sortcolumns;
- } else if (strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK) {
- obj.setCellProperty( "head", e.cell, "text", strHeadText.substr(0, strHeadText.length - 2));
- bindDs.keystring = "S:" + sortcolumns;
- } else {
- obj.setCellProperty( "head", e.cell, "text", strHeadText + " " + CONST_ASC_MARK);
- bindDs.keystring = "S:" + "+" + BodyColId[1] + sortcolumns;
- }
- //}
- //}
- }
- /**********************************************************************************
- * 함수명 : grdf_clearSort()
- * 설명 : Grid Sort clear
- * argument : Object obj - Grid Ojbect
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_clearSort(obj:Grid)
- {
- var bindDs = eval(obj.binddataset);
- bindDs.keystring = "";
- for (var i = 0; i < obj.getCellCount("head"); i++)
- {
- if(obj.getCellText(-1, i) == "undefined") continue;
- var strHeadText = obj.getCellText(-1, i);
- if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK || strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK)
- {
- obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2));
- }
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_setRowTypeIcon()
- * 설명 : 그리드 상태 아이콘 보여주기
- * argument : Object objGrd - Grid Ojbect
- String colIndex - Grid body col Index
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setRowTypeIcon(objGrd, colIndex)
- {
- 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'))";
- objGrd.setCellProperty("Body", colIndex, "displaytype", "image");
- objGrd.setCellProperty("Body", colIndex, "edittype", "none");
- objGrd.setCellProperty("Body", colIndex, "align", "center middle");
- objGrd.setCellProperty("Body", colIndex, "expr", sExprText);
- }
- var CONST_SEPARATOR = " "; //컬럼별 구분자
- var iv_sClipboard;
- /**********************************************************************************
- * 함수명 : grdf_clipboardCopy()
- * 설명 : 그리드 선택 영역을 클립보드에 복사하기
- * argument : Object objGrd - Grid Ojbect
- * : bizFlag - AST, EMR, etc...
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_clipboardCopy(objGrd, bizFlag) {
- var lv_oBindDs = eval(objGrd.binddataset);
- var lv_sColID;
- var lv_sVal;
- var lv_sClipboard = "";
- var lv_nAreaStartRow;
- var lv_nAreaEndRow;
- var lv_nAreaStartCol;
- var lv_nAreaEndCol;
-
- if(objGrd.selecttype == "multiarea") {
- lv_nAreaStartRow = parseInt(objGrd.selectstartrow);
- lv_nAreaEndRow = parseInt(objGrd.selectendrow);
- lv_nAreaStartCol = parseInt(objGrd.selectstartcol);
- lv_nAreaEndCol = parseInt(objGrd.selectendcol);
- } else if(objGrd.selecttype == "multirow") {
- lv_nAreaStartRow = parseInt(objGrd.selectstartrow) ;
- lv_nAreaEndRow = parseInt(objGrd.selectendrow);
- lv_nAreaStartCol = 0;
- lv_nAreaEndCol = objGrd.getCellCount("body") - 1;
- } else {
- lv_nAreaStartRow = 0 ;
- lv_nAreaEndRow = lv_oBindDs.getRowCount() - 1;
- lv_nAreaStartCol = 0;
- lv_nAreaEndCol = objGrd.getCellCount("body") - 1;
- }
-
- if( bizFlag == "AST" ){
- lv_sClipboard = String.fromCharCode(10);
- }
-
- for(var nRow = lv_nAreaStartRow; nRow <= lv_nAreaEndRow; nRow++)
- {
- for(var nCell = lv_nAreaStartCol; nCell <= lv_nAreaEndCol; nCell++)
- {
- lv_sColID = objGrd.getCellProperty("body",nCell,"text");
- lv_sVal = objGrd.getCellValue(nRow,nCell);
- lv_sClipboard = lv_sClipboard + lv_sVal + CONST_SEPARATOR;
- }
- lv_sClipboard = lv_sClipboard.substr(0,lv_sClipboard.length-1);
- lv_sClipboard = lv_sClipboard +String.fromCharCode(10);
- }
- lv_sClipboard = lv_sClipboard.substr(0,lv_sClipboard.length-1);
-
- iv_sClipboard = lv_sClipboard;
-
- system.setClipboard("CF_TEXT",lv_sClipboard);
- return;
- }
- /**********************************************************************************
- * 함수명 : grdf_clipboardPaste()
- * 설명 : 그리드 선택 영역에 붙여넣기
- * argument : Object objGrd - Grid Ojbect
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_clipboardPaste(objGrd) {
- var lv_oBindDs = eval(objGrd.binddataset);
- var lv_sClipboardType = "";
- var lv_nSearchRow = 0;
- var lv_nSearchCol = 0;
- var lv_sColID;
- var lv_sVal;
- var lv_sBgColor;
-
- var lv_sClipboardData = system.getClipboard("CF_TEXT").replace(",","");
- if(lv_sClipboardData!=iv_sClipboard) lv_sClipboardType = "EXCEL";
-
- var lv_sClipboardRecord = lv_sClipboardData.split("\n");
- var lv_sClipboardColunm;
- var lv_nAreaStartRow;
- var lv_nAreaEndRow;
- var lv_nAreaStartCol;
- var lv_nAreaEndCol;
- if(objGrd.selecttype == "multiarea")
- {
- lv_nAreaStartRow = objGrd.selectstartrow;
- lv_nAreaEndRow = objGrd.selectendrow;
- lv_nAreaStartCol = objGrd.selectstartcol;
- lv_nAreaEndCol = objGrd.selectendcol;
- }
- else
- {
- lv_nAreaStartRow = 0 ;
- lv_nAreaEndRow = lv_oBindDs.getRowCount() - 1;
- lv_nAreaStartCol = 0;
- lv_nAreaEndCol = lv_oBindDs.getColCount() - 1;
- }
- for(var nRow = lv_nAreaStartRow; nRow < (eval(lv_nAreaStartRow) + eval(lv_sClipboardRecord.length)); nRow++)
- {
- lv_sClipboardColunm = lv_sClipboardRecord[lv_nSearchRow].split(CONST_SEPARATOR);
- lv_nSearchCol = 0;
- var nAreaCell = eval(lv_nAreaStartCol) + eval(lv_sClipboardColunm.length);
- for(var nCell = lv_nAreaStartCol; nCell < nAreaCell && nCell < objGrd.getFormatColCount(); nCell++)
- {
- if(objGrd.getCellProperty("body",nCell,"text") != "undefined" && objGrd.getCellProperty("body",nCell,"text") != null)
- {
- lv_sColID = objGrd.getCellProperty("body",nCell,"text").substr(5);
- }
- lv_sVal = lv_sClipboardColunm[lv_nSearchCol];
-
-
-
- if(lv_sVal != "undefined" )
- {
- //값이 없는데 unicode가 포함된 경우 빈값으로 처리
- if(!utlf_isNull(lv_sVal)){
- var lv_sVal2 = lv_sVal.replace(String.fromCharCode(13),"");
- if(lv_sVal2 == "undefined" ) lv_sVal="";
- }
-
- //if(lv_sVal == "undefined" ) trace(lv_sColID+":::"+utlf_isNull(utlf_transNullToEmpty(lv_sVal).trim())+"::"+utlf_transNullToEmpty(lv_sVal).trim());
-
- if(lv_sVal != null &&!(lv_sClipboardType=="EXCEL"&&(nRow+1)==(eval(lv_nAreaStartRow) + eval(lv_sClipboardRecord.length)))){
- lv_oBindDs.setColumn(nRow,lv_sColID,utlf_transNullToEmpty(lv_sVal).trim());
- }
-
- lv_nSearchCol++;
- }else{
-
- lv_nSearchCol++;
- }
- nAreaCell++;
- }
- lv_nSearchRow++;
- }
- return;
- }
- /**********************************************************************************
- * 함수명 : grdf_setAllCheck()
- * 설명 : 그리드 전체체크 관련 이벤트 추가 함수
- * argument : Object obj - Grid Ojbect
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setAllCheck(obj)
- {
- var lv_nCellCnt = obj.getCellCount("Head");
- var lv_sCellText = "";
- var lv_nChkCnt = 0;
- var lv_sDpType = "";
- for(var i=0; i<lv_nCellCnt; i++)
- {
- lv_sCellText = obj.getCellText(-1,i);
- lv_sDpType = obj.getCellProperty("Head", i,"displaytype");
-
- if(lv_sDpType == "checkbox")
- {
- lv_sDpType = obj.setCellProperty("Head", i,"text","expr:0");
- lv_nChkCnt++;
- }
- }
- lv_nChkCnt++;
-
- // trace("lv_nChkCn::t" + lv_nChkCnt);
- if(lv_nChkCnt > 0) obj.onheadclick.addHandler(grdf_setGridCheckAll);
- //if(lv_nChkCnt > 0) obj.onheadclick.addHandler(grdf_setEventGrid);
- }
- /**********************************************************************************
- * 함수명 : grdf_setGridCheckInfo()
- * 설명 : When you click a grid header, cell Index Find
- * argument : Object obj - Grid Object
- Event e - GridClickEventInfo Object
- * return Type : Cell Index
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setGridCheckInfo(obj:Grid, e:GridClickEventInfo)
- {
- for(var i = 0; i < obj.getCellCount("Body"); i++){
- var nCol = obj.getCellProperty("Body", i, "col");
-
- if(nCol == e.col) return i;
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_setGridCheckAll()
- * 설명 : When you click a grid header, the entire check
- * argument : Object obj - Grid Object
- Event e - GridClickEventInfo Object
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setGridCheckAll(obj:Grid, e:GridClickEventInfo)
- {
- var strType;
- var vl_chk;
- var strVal;
- var strChkVal;
- var objDS;
- var nCell = e.cell;
- var nSubCnt = obj.getSubCellCount("head",nCell);
- //var nSubBodyCnt = obj.getSubCellCount("body",nCell);
- var nSubCnt2 = 0;
- var nSubCntTot = 0;
- for(var i=0; i< nCell; i++){
- nSubCnt2 = obj.getSubCellCount("head",i);
- nSubCntTot += nSubCnt2;
- }
-
- objDS = eval(obj.binddataset);
- if (nSubCnt > 0) { // Case Merge Cell
- var nChkIdx = -1;
- for ( var i = 0; i < nSubCnt; i++)
- {
- strType = obj.getSubCellProperty("head",e.cell,i,"displaytype");
- if(strType == "checkbox") {
- nChkIdx = i;
- break;
- }
- }
-
- if (nChkIdx == -1)
- return;
- // Head setting
- strVal = obj.getSubCellProperty("head", nCell, nChkIdx, "text");
- if (strVal == "0" || utlf_isNull(strVal)) {
- obj.setSubCellProperty("head",nCell,nChkIdx,"text", '1');
- vl_chk="1";
- } else {
- obj.setSubCellProperty("head",nCell,nChkIdx,"text", '0');
- vl_chk="0";
- }
- } else { // Case not merge
- strType = obj.getCellProperty("head", e.cell, "displaytype");
- if(strType != "checkbox") {
- return;
- }
- // Head setting
- strVal = obj.getCellProperty("head", nCell, "text");
- try{
- strVal = strVal.replace("expr:","");
- }catch(e){};
-
- if (strVal == "0" || utlf_isNull(strVal)) {
- obj.setCellProperty("head", nCell, "text", '1');
- vl_chk="1";
- } else {
- obj.setCellProperty("head", nCell, "text", '0');
- vl_chk="0";
- }
- }
- grdf_addHeadClickHandler(obj,e,objDS,vl_chk);
- }
- /**********************************************************************************
- * 함수명 : grdf_addHeadClickHandler()
- * 설명 : 전체체크/해제 실적용구현
- * argument : Object obj - Grid
- Event Handler e
- Object objDS - Grid Binddataset
- String vl_chk - 체크뱍스 변경 값
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_addHeadClickHandler(obj,e, objDS,vl_chk){
- var nCell = grdf_setGridCheckInfo(obj,e);
-
- var BodyColId = (obj.getCellProperty("body", nCell,"text")).toString().split(":"); // e.col : 바인드된 컬럼.
- if (BodyColId[0] != "bind") {
- return false;
- }
- //objDS.enableevent = false;
- for(var i=0 ; i< objDS.getRowCount(); i++){
- objDS.setColumn(i, BodyColId[1], vl_chk);
- }
- //objDS.enableevent = true;
- }
- /**********************************************************************************
- * 함수명 : grdf_columnSetData()
- * 설명 : chkval 값에 따라 컬럼에 데이터 입력
- * argument : Object objDs - dataset
- Number nRowIndex - row Index
- String sColid - 변경할 컬럼명
- String chkVal - 체크뱍스 변경 값
- String trueVal - 체크 되었을때 입력할 값
- String fasleVal - 체크박스가 체크 해제 되었을대 입력될 값
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_columnSetData(objDs, nRowIndex, sColid, chkVal, trueVal, falseVal)
- {
- if(chkVal == "1" || chkVal == trueVal)
- {
- objDs.setColumn(nRowIndex, sColid, trueVal);
- }
- else
- {
- objDs.setColumn(nRowIndex, sColid, falseVal);
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_getKeyCols
- * 설명 : 그리드의 cell의 property 속성이 true인 것의 col index array
- * argument : String gridID - 그리드 아이디
- String atttibutezName - 속성(property)
- * return Type : Array arrCols
- * 작성자 : tobesoft
- ex) grdf_getKeyCols("grd01", "editautoselect"); //return array(1,3,6)
- **********************************************************************************/
- function grdf_getKeyCols( gridID, atttibutezName) {
- var gridObj = eval(gridID);
- var gridDs = eval(gridObj.binddataset);
- var arrCols = new Array();
-
- for(var i=0; i < gridObj.getCellCount("Body"); i++)
- {
- if(gridObj.getCellProperty("Body", i, atttibutezName) == "true")
- {
- arrCols.push(i);
- }
- }
-
- return arrCols;
- }
- /**********************************************************************************
- * 함수명 : grdf_setToolTipBind
- * 설명 : 그리드의 tooltip을 자동으로 세팅해준다.
- * argument : Object objGrd - 그리드 Component
- * return Type : none
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setToolTipBind(objGrd)
- {
- if(objGrd.toString() != '[object Grid]')
- {
- return application.alert('Grid Component가 없습니다.');
- }
-
- var nCell = objGrd.getCellCount("Body"); //cell 갯수
-
- var sTxt = ""; //cell의 text Property
- var sDispType = ""; //cell의 displaytype Property
- var sCmbDs = ""; //cell의 combodataset Property
- var sBindCd = ""; //cell의 combocodecol Property
- var sBindNm = ""; //cell의 combodatacol Property
-
- for(var i =0; i < nCell ; i++)
- {
- sTxt = objGrd.getCellProperty("Body", i, "text");
-
- if(utlf_isNull(sTxt)) continue;
-
- //combo일경우 expr 생성
- if(objGrd.getCellProperty("Body", i, "displaytype") == "combo")
- {
- sCmbDs = objGrd.getCellProperty("body", i, "combodataset");
- sBindCd = objGrd.getCellProperty("body", i, "combocodecol");
- sBindNm = objGrd.getCellProperty("body", i, "combodatacol");
-
- var arrText = sTxt.split(":");
- sTxt = "expr:"+sCmbDs+".lookup('"+sBindCd+"',"+objGrd.binddataset+".getColumn(currow,'"+arrText[1]+"'),'"+sBindNm+"')";
- }
-
- objGrd.setCellProperty("Body", i, "tooltiptext", sTxt);
- }
-
-
- /*
- for(var i =0; i < nCell ; i++)
- {
- for(var j =0; j < bindDs.getRowCount(); j++)
- {
- sTxt = objGrd.getCellText(j, i);
- //sTxt = objGrd.getCellProperty("Body", i, "text");
- //trace(i+" : "+sTxt);
- objGrd.setCellProperty("Body", i, "tooltiptext", sTxt);
- }
- }
- */
- objGrd.tooltiptype = "hover";
- }
- /**********************************************************************************
- * 함수명 : grdf_setCellStyle
- * 설명 : 그리드의 Cell Style 지정
- * argument : Object gridID - 그리드 아이디
- String styleFlag - 컬러 인덱스
- String data - 데이터 값
- Srting colRef - 비교할 컬럼 Ref
- String setColRef - 변경할 컬럼 Ref
- String fillflag - 변경할 항목 구분(B: background, F: font)
- * return Type : none
- * 사용예 : grdf_setCellStyle(Grid00,"0^1^2","V^P^D","Column0","Column1","B");
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setCellStyle( gridID , styleFlag , data , colRef , setColRef, fillflag ) {
- var fillStyle = "";
- var style;
-
- var styleFlags = styleFlag.split("^");
- var datas = data.split("^");
- var setCellIdx = gridID.getBindCellIndex( "body", setColRef);
-
- if ( fillflag == "B" ) {
- style = new Array("#ffff00", "#ccffcc", "#FF9A00");
- gridID.setCellProperty("body", setCellIdx, "background" ,"");
- gridID.setCellProperty("body", setCellIdx, "background2" ,"");
- gridID.setCellProperty("body", setCellIdx, "font" ,"");
- } else if ( fillflag == "F" ) {
- style = new Array("#ffff00", "#ccffcc", "#FF9A00");
- gridID.setCellProperty("body", setCellIdx, "color" ,"");
- gridID.setCellProperty("body", setCellIdx, "color" ,"");
- gridID.setCellProperty("body", setCellIdx, "font" ,"");
- }
-
- var BackGroundFont = "";
- var end = "";
- var font = "";
-
- if(datas.length == 1){
- BackGroundFont += "expr:String(" + colRef+") == '" + dataValue +"' ? '"+styleValue+"' : ''";
- font += "expr:String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : ''";
- }else{
- for( var j = 0 ; j < datas.length ; j++ ) {
-
- var dataValue = datas[j];
- var styleValue = style[styleFlags[j]];
-
- if(j == datas.length-1){
- BackGroundFont += "String(" + colRef+") == '" + dataValue +"' ? '"+styleValue+"' : ''";
- font += "String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : ''";
-
- }else if(j == 0){
- BackGroundFont += "expr:String(" + colRef+") == '" + dataValue +"' ? '"+styleValue+"' : (";
- font += "expr:String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : (";
-
- }else{
- BackGroundFont += "String(" +colRef+") == '" + dataValue +"' ? '"+styleValue+"' : (";
- font += "String(" + colRef+") == '" + dataValue +"' ? 'Dotum,9,bold' : (";
- }
-
- if( j<datas.length-1)
- end += ")";
- }
-
- BackGroundFont += end;
- font += end;
- }
-
- if ( fillflag == "B" ) {
- gridID.setCellProperty("body", setCellIdx, "background" ,BackGroundFont);
- gridID.setCellProperty("body", setCellIdx, "background2" ,BackGroundFont);
- gridID.setCellProperty("body", setCellIdx, "font" ,font);
- } else if ( fillflag == "F" ) {
- gridID.setCellProperty("body", setCellIdx, "color" ,BackGroundFont);
- gridID.setCellProperty("body", setCellIdx, "color" ,BackGroundFont);
- gridID.setCellProperty("body", setCellIdx, "font" ,font);
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_setRowStyle
- * 설명 : 그리드의 Row Style 지정
- * argument : Object gridID - 그리드 아이디
- String styleFlag - 컬러 인덱스
- String data - 데이터 값
- Srting colRef - 비교할 컬럼 Ref
- String [control] - 조건 smaller | smallerThen | equal | biggerThen | bigger
- * return Type : none
- * 사용예 : grdf_setRowStyle( Grid00 , "0^2" , "3^5" , "Column1" , "small^small" )
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setRowStyle( gridID , styleFlag , data , colRef , control ) {
- var fillStyle = "";
- var style = new Array("#fcd2c1" , "#ffe79d" , "#f3e1bf" , "#7BE6B7" , "#b9e5fb" , "#f7a08b" , "#fec34d" , "#dec6a4" , "#c8e67b" ,
- "#43c8f5" , "#ff9933" , "#3399ff" , "#9999cc" , "#FFC8C8" , "#fab7bf" , "#ffff00" , "#ccffcc" , "#FF9A00", "#ff0000");
-
- var styleFlags = styleFlag.split("^");
- var datas = data.split("^");
-
- if( control == null || control == "" )
- control = "equal";
-
- var controls = control.split("^");
-
- var BackGroundFont = "";
- var end = "";
- for( var j = 0 ; j < datas.length ; j++ ) {
-
- var dataValue = datas[j];
- var styleValue = style[styleFlags[j]];
-
-
- if(controls[j] == null)
- controls[j] = "equal";
-
- var ctrl = "";
- switch( controls[j] ) {
- case "small":
- ctrl = "<";
- break;
- case "smallThen":
- ctrl = "<=";
- break;
- case "bigger":
- ctrl = ">";
- break;
- case "biggerThen":
- ctrl = ">=";
- break;
- case "equal":
- ctrl = "==";
- break;
- case "notEqual":
- ctrl = "!=";
- break;
- }
- if(j == datas.length-1){
- if(datas.length == 1){
- BackGroundFont = "expr:String(" + colRef +") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : ''";
- }else{
- BackGroundFont += "String(" + colRef+") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : ''";
- }
-
- }else if(j == 0){
- BackGroundFont += "expr:String(" + colRef+") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : (";
- }else{
- BackGroundFont += "String("+colRef+") "+ctrl+ " '" + dataValue +"' ? '"+styleValue+"' : (";
- }
-
- if( j<datas.length-1)
- end += ")";
- }
-
- BackGroundFont += end;
-
- for(var i=0; i<gridID.getCellCount("body");i++){
- gridID.setCellProperty("body", i, "background" ,BackGroundFont);
- gridID.setCellProperty("body", i, "background2" ,BackGroundFont);
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_initGridStyle
- * 설명 : 그리드의 Style 초기화(배경, 글씨색, font)
- * argument : Object gridID - 그리드 아이디
- * return Type : none
- * 사용예 : grdf_setRowStyle( Grid00 , "0^2" , "3^5" , "Column1" , "small^small" )
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_initGridStyle(gridID){
- for(var i=0; i<gridID.getCellCount("body");i++){
- gridID.setCellProperty("body", i, "background" ,"");
- gridID.setCellProperty("body", i, "background2" ,"");
- gridID.setCellProperty("body", i, "color" ,"");
- gridID.setCellProperty("body", i, "color2" ,"");
- gridID.setCellProperty("body", i, "font" ,"");
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_setCellMask
- * 설명 : 그리드 Cell Mask 처리시 null 인경우 Mask 처리 안함
- * argument : Cell : col - 그리드 Cell Bind Column
- Mask String : sMask - mask
- * return Type : none
- * 사용예 : expr:grdf_setCellMask(Column0,"#####-#####") //Cell Mask에 적용
- Grid00.setCellProperty("body",2,"mask", "expr:grdf_setCellMask(Column2,'###-###')");
- * 작성자 : tobesoft
- **********************************************************************************/
- function grdf_setCellMask(col, sMask){
- if( utlf_isNull(col))
- {
- return "";
- }
- return sMask;
- }
- /**********************************************************************************
- * 함수명 : grdf_getSelectedCols
- * 설명 : 그리드의 선택된 컬럼index를 리턴(숨겨준 컬럼은 제외)
- * argument : oGrid 그리드 객체
- * return Type : Array : 선택된 셀의 index 값이 들어있는 array
- * 사용예 : var SelectedCells = grdf_getSelectedCols(SelectedGrdObj);
- * 작성자 : 김상목
- **********************************************************************************/
- function grdf_getSelectedCols(oGrid:Grid) {
- var selectedCols = new Array();
- var startCol = oGrid.selectstartcol;
- var endCol = oGrid.selectendcol;
-
- if(startCol[0] >= 0) { // 선택된 열이 없을 경우에 대한 예외 처리 추가
- for(var i = 0; i < startCol.length; i++) {
- var columnIndex = startCol[i];
-
- for(var j = columnIndex; j <= endCol[i]; j++) {
- if(oGrid.getFormatColProperty(j, "size") != 0) // 숨겨준 컬럼은 제외
- selectedCols[selectedCols.length] = j;
- }
- }
- }
-
- return selectedCols;
- }
- /**********************************************************************************
- * 함수명 : grdf_getSelectedRows
- * 설명 : 그리드의 선택된 로우index를 리턴
- * argument : oGrid 그리드 객체
- * return Type : Array : 선택된 로우의 index 값이 들어있는 array
- * 사용예 : var SelectedRows = grdf_getSelectedRows(SelectedGrdObj);
- * 작성자 : 김상목
- **********************************************************************************/
- function grdf_getSelectedRows(oGrid:Grid) {
- var selectedRows = new Array();
- var startRow = oGrid.selectstartrow;
- var endRow = oGrid.selectendrow;
- if(startRow[0] >= 0) { // 선택된 행이 없을 경우에 대한 예외 처리 추가
- for(var i = 0; i < startRow.length; i++) {
- var columnIndex = startRow[i];
-
- for(var j = columnIndex; j <= endRow[i]; j++) {
- selectedRows[selectedRows.length] = j;
- }
- }
- }
-
- return selectedRows;
- }
- /**********************************************************************************
- * 함수명 : grdf_setSelectedCell
- * 설명 : 그리드의 선택 영역을 체크하여 미선택 영역이면 선택 시켜준다
- * argument : oGrid 그리드 객체
- e 그리드 마우스 이벤트
- * return Type : boolean : 그리의 셀이 text 와 같이 편집 가능한 셀의 경우 팝업 메뉴와 윈도우 기본 편집 팝업을
- 구분하여 띄우기 위함(true : 팝업 메뉴, false : 윈도우 기본 편집 팝업 호출 가능 상태)
- * 사용예 : grdf_setSelectedCell(obj, e);
- * 작성자 : 김상목
- **********************************************************************************/
- function grdf_setSelectedCell(obj:Grid, e:GridMouseEventInfo) {
- // 범위 밖의 셀 클릭 예외 처리
- if(e.row < 0 || e.col < 0) return false;
-
- if(!obj.isSelectedCell(e.cell, "body", e.row)) {
- var dataset = eval(obj.binddataset);
-
- if( obj.selecttype == "multirow" ){
- dataset.selectRow(e.row);
- }
-
- dataset.rowposition = e.row;
- obj.setCellPos(e.cell);
- }
-
- // 셀편집중이 아닐 때만 메뉴팝업 뜰 수 있도록 처리
- if(obj.getEditText() != undefined)
- return false;
-
- return true;
- }
- /**********************************************************************************
- * 함수명 : grdf_setStatusColumn
- * 설명 : 데이터셋에 그리드의 rowType에 따라 status 컬럼의 값을 업데이트 시켜준다.
- * argument : oDataSet 그리드의 업데이트 할 데이터셋으로 필터링된 데이터셋
- sStatus status로 쓰고 있는 컬럼의 이름
- * return Type :
- * 사용예 : grdf_setStatusColumn(oDsUpdate, sStatus);
- * 작성자 : 김상목
- **********************************************************************************/
- function grdf_setStatusColumn(oDataSet:Dataset, sStatus) {
- if(utlf_isNull(oDataSet.getColumnInfo(sStatus)))
- oDataSet.addColumn(sStatus, "string");
-
- var count = oDataSet.rowcount;
- for(var i = 0; i < count; i++) {
- var status = "n";
- var rowType = oDataSet.getRowType(i);
-
- if(rowType == 2)
- status = "i";
- else if(rowType == 4)
- status = "u";
- else if(rowType == 8)
- status = "d";
-
- oDataSet.setColumn(i, sStatus, status);
- }
- }
- /**********************************************************************************
- * 함수명 : grdf_expandTree
- * 설명 : Tree로 구성된 그리드에서 특정 위치까지 Tree를 expand 시켜준다.
- * argument : oGrid - 그리드 오브젝트
- nSelectVal - 그리드에 바인드 되어 있는 Dataset 기준의 rowposition
- bExpand - 특정 위치 선택 후 click event 까지 발생시킬 것인지 유무
- * return Type :
- * 사용예 : grdf_expandTree(grd_tree, 88);
- * 작성자 : 김상목
- **********************************************************************************/
- function grdf_expandTree(oGrid:Grid, nSelectVal, bExpand) {
- var parentRow = nSelectVal;
- var path = new Array();
- var index = 0;
-
- if(utlf_isNull(nSelectVal) || nSelectVal < 0) {
- parentRow = nSelectVal = 0;
- path[index++] = 0;
- } else {
- path[index++] = nSelectVal;
- }
-
- while(parentRow >= 0) {
- parentRow = oGrid.getTreeParentRow(parentRow, true);
- if(parentRow > -1)
- path[index++] = parentRow;
- }
-
- // 그리드를 먼저 초기화 하고 작업 시작
- oGrid.treeinitstatus = "collapse,all";
- var ds_bind = eval(oGrid.binddataset);
- ds_bind.rowposition = -1;
- for(var i = path.length - 1; i >= 0; i--) {
- var row = oGrid.getTreeRow(path[i]);
- if(row > -1 && !oGrid.isTreeLeafRow(row, false))
- oGrid.setTreeStatus(row, (!bExpand && (path[i] == nSelectVal)) ? false : true);
- }
-
- if(!utlf_isNull(oGrid.userdata)) // userdata 있을 경우 0으로 초기화(행 클릭시 expand를 위해 사용)
- oGrid.userdata = 0;
-
- // 작업이 끝난 후 그리드 포커스 및 셀렉트 설정
- oGrid.setFocus();
- ds_bind.rowposition = nSelectVal;
-
- if(bExpand) // expand 라면 oncellclick 이벤트를 호출 시켜 바로 데이터 조회를 할 수 있도록 함
- oGrid.oncellclick.fireEvent(oGrid, new GridClickEventInfo());
- }
- /**********************************************************************************
- * 함수명 : grdf_expandDepth
- * 설명 : Tree로 구성된 그리드에서 lvl에 해당 하는 특정 위치까지 Tree를 expand 시켜준다.
- * argument : oGrid - 그리드 오브젝트
- lvl - expand 시킬 레벨
- treeColNm - 그리드에서 트리로 사용하고 있는 컬럼 이름(입력하지 않으면 첫번째 트리로 설정된 컬럼을 찾도록 되어 있음)
- * return Type :
- * 사용예 : grdf_expandDepth(grd_tree, 1, "indxnm");
- * 작성자 : 김상목
- **********************************************************************************/
- function grdf_expandDepth(oGrid:Grid, lvl, treeColNm) {
- if(utlf_isNull(treeColNm)) { // 컬럼 이름 미 입력시 edittype이 tree로 설정되어 있는 첫번째 컬럼의 컬럼 이름 사용
- for (var i = 0; i < oGrid.getFormatColCount(); i++) {
- var edittype = oGrid.getCellProperty("body", i, "edittype");
- if(edittype == "tree") {
- var text = oGrid.getCellProperty("body", i, "text");
- treeColNm = text.split(":")[1];
- break;
- }
- }
- }
- var col = oGrid.getBindCellIndex("body", treeColNm);
- var treelevel = oGrid.getCellProperty("body", col, "treelevel");
- var startlevel = parseInt(oGrid.getCellProperty("body", col, "treestartlevel"));
-
- var lvlNm = treelevel.split(":")[1];
- var expr = "";
- var comp_expr = "";
-
- for(var i = startlevel; i <= lvl; i++) {
- var prefix = (i == startlevel) ? "" : " || ";
- expr += prefix + lvlNm + " == '" + i + "'";
- comp_expr += prefix + "levl" + " == '" + i + "'";
- }
-
- oGrid.treeinitstatus = "collapse,all";
-
- var ds_bind = eval(oGrid.binddataset);
-
- var lvl1Cnt = ds_bind.getCaseCount(expr);
- var findLvl1 = 0;
- var rowcount = ds_bind.rowcount;
-
- for(var i = 0; i < rowcount; i++) {
- var levl = ds_bind.getColumn(i, lvlNm);
- if(eval(comp_expr)) {
- findLvl1++;
-
- var row = oGrid.getTreeRow(i);
- if(row > -1 && !oGrid.isTreeLeafRow(row, false))
- oGrid.setTreeStatus(row, true);
-
- if(findLvl1 == lvl1Cnt) break;
- }
- }
- }
- // 그리드 keystring을 사용하지 않고 그리드에 바인드 되어 있는 실제 데이타셋을 변경 할 때 사용하는 sort
- // 처방 화면의 처방 리스트에 적용
- // 김상목
- function grdf_gridSort2(obj:Grid, e:GridClickEventInfo) {
- var bindDs = eval(obj.binddataset);
- if (bindDs.rowcount == 0) return false;
-
- var colName = lf_getBindCellName(obj, e.col);
-
- bindDs.enableevent = false;
- bindDs.applyChange();
-
- for (var i = 0; i < obj.getCellCount("head"); i++) {
- var strHeadText = obj.getCellText(-1, i);
- if(strHeadText == "undefined")
- continue;
-
- // CONST_DESC_MARK -> CONST_ASC_MARK
- if(i == e.cell) {
- if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK) { // 내림차순으로 정렬
- obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2) + " " + CONST_DESC_MARK);
- realSort("desc", colName, bindDs);
- } else if (strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK) { // 오름차순으로 정렬
- obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2) + " " + CONST_ASC_MARK);
- realSort("asc", colName, bindDs);
- } else { // 내림차순으로 정렬
- obj.setCellProperty("head", i, "text", strHeadText + " " + CONST_DESC_MARK);
- realSort("desc", colName, bindDs);
- }
- } else { // 나머지는 정렬표시 삭제
- if (strHeadText.substr(strHeadText.length - 1) == CONST_ASC_MARK || strHeadText.substr(strHeadText.length - 1) == CONST_DESC_MARK) {
- obj.setCellProperty("head", i, "text", strHeadText.substr(0, strHeadText.length - 2));
- }
- }
- }
-
- bindDs.applyChange();
- bindDs.enableevent = true;
- }
- //20181012 이돈희 : 다른 패키지에서 realSort 사용을 위하여 grdf_realSort 함수 생성
- function grdf_realSort(mode, colName, oDs:Dataset) {
- realSort(mode, colName, oDs);
- }
- function realSort(mode, colName, oDs:Dataset) {
- quickSort(mode, oDs, colName, 0, oDs.rowcount - 1);
- }
- function quickSort(mode, oDs:Dataset, colName, oldleft, oldright) {
- var pivot = oldright; // pivot의 값
- var left = oldleft; // 좌 인덱스
- var right = oldright; // 우 인덱스
-
- while(left < right) {
- if(mode == "asc") {
- while(true) {
- var leftVal = utlf_transNullToEmpty(oDs.getColumn(left, colName));
- var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
-
- //if(leftVal.isNumber()) leftVal = parseFloat(leftVal);
- //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
-
- if(leftVal <= pivotVal && (left < right))
- left++;
- else
- break;
- }
- while(true) {
- var rightVal = utlf_transNullToEmpty(oDs.getColumn(right, colName));
- var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
-
- //if(rightVal.isNumber()) rightVal = parseFloat(rightVal);
- //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
-
- if(rightVal >= pivotVal && (left < right))
- right--;
- else
- break;
- }
- } else {
- while(true) {
- var leftVal = utlf_transNullToEmpty(oDs.getColumn(left, colName));
- var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
- //if(leftVal.isNumber()) leftVal = parseFloat(leftVal);
- //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
- if(leftVal >= pivotVal && (left < right))
- left++;
- else
- break;
- }
- while(true) {
- var rightVal = utlf_transNullToEmpty(oDs.getColumn(right, colName));
- var pivotVal = utlf_transNullToEmpty(oDs.getColumn(pivot, colName));
-
- //if(rightVal.isNumber()) rightVal = parseFloat(rightVal);
- //if(pivotVal.isNumber()) pivotVal = parseFloat(pivotVal);
- if(rightVal <= pivotVal && (left < right))
- right--;
- else
- break;
- }
- }
-
- if (left != right)
- oDs.exchangeRow(left, right);
- }
-
- oDs.exchangeRow(left, pivot);
-
- pivot = left;
-
- if (oldleft < pivot)
- quickSort(mode, oDs, colName, oldleft, pivot - 1);
- if (oldright > pivot)
- quickSort(mode, oDs, colName, pivot + 1, oldright);
- }
- /****************************************************************************************
- * Function : grdf_setGridEllipsisText
- * Description : 실제 Cell의 크기와 글자 길이에 따라 '...'을 붙혀서 값을 반환하고나 셀의 align을 설정해준다.
- * 데이타셋 조회 후 사용해야 함
- * <사용하면 안되는 경우>
- * 1) 셀의 expr 에 값이 있는 경우 사용하면 안됨
- * 2) 셀의 text에 expr 처리되어 있는 경우
- * 3) 셀의 align 에 디폴트값 이외의 값이 있는 경우
- * Argument : oGrid - 그리드 객체
- * colNames - 컬럼이름을 가진 배열 (예. ["deptnm", "msgcnts"])
- * onlyVAlignYN - Ellipsis 기능을 빼고 오직 세로 정렬 기능만 사용하는 경우
- * 사용예 : grdf_setGridEllipsisText(grd_receivemsg, ["deptnm", "msgcnts"]);
- * return type :
- * Creator : 김상목
- ****************************************************************************************/
- function grdf_setGridEllipsisText(oGrid, colNames, onlyVAlignYN) {
- var oDs = this.objects[oGrid.binddataset];
- var cnt = oDs.rowcount;
-
- oGrid.onlyVAlignYN = onlyVAlignYN;
-
- oGrid.updateToDataset();
-
- oDs.updatecontrol = false;
- oDs.enableevent = false;
- oGrid.enableevent = false;
- oGrid.enabelredraw = false;
-
- oGrid.ellipsis = colNames;
- oGrid.oncolresized.addHandler(fOnColResized_Ellipsis);
- oGrid.onkillfocus.addHandler(fOnKillfocus_Ellipsis);
- // oGrid.onselectchanged.addHandler(fOnSelectchanged_Ellipsis);
- // oGrid.onnodataareaclick.addHandler(fOnNodataareaclick_Ellipsis);
- oGrid.onlbuttondown.addHandler(fOnLbuttondown_Ellipsis);
-
- for(var i = 0; i < colNames.length; i++) {
- var newColName = colNames[i] + "_ellipsis";
- oDs.addColumn(newColName, "string", 256);
- oDs.addColumn("top_align", "string", 256);
- }
-
- for( var i = 0; i < cnt; i++) {
- for(var j = 0; j < colNames.length; j++) {
- var newColName = colNames[j] + "_ellipsis";
- var newColIndex = oGrid.getBindCellIndex("body", colNames[j]);
- if(newColIndex < 0) // 한번 설정하고 나면 bind 이름이 _ellipsis가 붙기 때문에 기존이름으로는 위치 확인이 안되므로 붙혀서 다시 검색
- newColIndex = oGrid.getBindCellIndex("body", newColName);
- if(newColIndex < 0) continue; // 그래도 없으면 패스
-
- var msgcnts = lf_getGridEllipsisText(oGrid, newColIndex, colNames[j], i);
- oDs.setColumn(i, newColName, msgcnts);
-
- // expr 에 표현할 값 셋팅, align은 ...없이 2라인 이상 일때는 top으로 설정
- if(i == cnt - 1) {
- oGrid.setCellProperty("body", newColIndex, "expr", "expr:utlf_isNull(" + newColName + ") ? (utlf_isNull(" + colNames[j] + ") ? '' : " + colNames[j] + ") : " + newColName);
- oGrid.setCellProperty("body", newColIndex, "align", "EXPR(top_align == 'Y' ? 'left top' : 'left middle')");
- }
- }
- }
-
- oDs.enableevent = true;
- oGrid.enableevent = true;
- oGrid.enabelredraw = true;
- oDs.updatecontrol = true;
- }
- function fOnColResized_Ellipsis(obj:Grid, e:GridSizeChangedEventInfo)
- {
- grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
- }
- function fOnKillfocus_Ellipsis(obj:Grid, e:KillFocusEventInfo)
- {
- grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
- }
- // function fOnSelectchanged_Ellipsis(obj:Grid, e:GridSelectEventInfo)
- // {
- // grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
- // }
- //
- // function fOnNodataareaclick_Ellipsis(obj:Grid, e:EventInfo)
- // {
- // grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
- // }
- function fOnLbuttondown_Ellipsis(obj:Grid, e:GridMouseEventInfo)
- {
- grdf_setGridEllipsisText(obj, obj.ellipsis, obj.onlyVAlignYN);
- }
- function lf_getGridEllipsisText(ctrlObj, colIndex, colName, row) {
- var oDs = this.objects[ctrlObj.binddataset];
- var text = oDs.getColumn(row, colName);
- var result = text;
- var isMiddleAlign = false;
-
- // 정렬 초기화
- oDs.setColumn(row, "top_align", "");
- if(utlf_isNull(text)) {
- result = "";
- } else {
- text = text.replace(/\r\n/g, "\n");
- var arrText = text.split("\n");
- text = arrText[0]
-
- var font = ctrlObj.getCellProperty("body", colIndex, "font");
- if(utlf_isNull(font)) font = "Dotum,9";
-
- var fontStyle = font.toString().split(',');
- var bold = false;
- if(fontStyle.length > 2 && fontStyle[2] == "bold") bold = true;
-
- var objFont = utlf_getObjFont(fontStyle[1], fontStyle[0], bold); // 실제 폰트의 너비
- var objFontSize = utlf_getTextSize(text, objFont);
-
- var paddingSize = 0;
- var padding = ctrlObj.getCellProperty("body", colIndex, "padding");
- if(!utlf_isNull(padding) && padding.length == 4) {
- paddingSize = padding[1] + padding[3];
- }
-
- var arrCellRect = ctrlObj.getCellRect(0, colIndex);
- var width = arrCellRect.width - paddingSize - ctrlObj.vscrollbar.position.width + 12; // 실제 글자가 들어갈 수 있는 영역 너비(width - padding 좌우영역 - 세로 스크롤 넓이 + 10은 보정값)
- var index = text.length;
- if(objFontSize.cx > width) {
- var first = 0;
- var last = text.length - 1;
- var mid = 0;
- var textSize;
-
- while(first <= last) {
- mid = parseInt((first + last) / 2);
- textSize = utlf_getTextSize(text.substring(0, mid) + "...", objFont);
-
- if(width == textSize.cx) {
- break;
- } else {
- if(textSize.cx < width)
- first = mid + 1;
- else
- last = mid - 1;
- }
- }
-
- if(textSize.cx > width) // 글자가 걸쳐 있는 경우 인덱스 하나를 더 빼준다.
- mid -= 1;
-
- if(mid > 0) {
- if(ctrlObj.onlyVAlignYN != "Y")
- result = text.substring(0, mid) + "...";
-
- isMiddleAlign = true;
- }
- }
-
- if(arrText.length > 1) {
- if(!isMiddleAlign) {
- oDs.setColumn(row, "top_align", "Y"); // ...이 적용 되어 있지 않고 2라인 이상 보일때는 세로 정렬을 top로 한다
- }
- }
- }
-
- return result;
- }
- /****************************************************************************************
- * Function : grdf_setGridIsEdit
- * Description : 그리드 autoenter key 모드에서 키(Del/Enter) 동작에 따른 Edit 상태 체크
- * [기록 그리드 사용]
- * Argument : oGrid - 그리드 객체
- * 사용예 : grdf_setGridIsEdit(grd_diaglist);
- oGrid.isDelEdit / oGrid.isEnterEdit
- * return type : N/A
- * Creator :
- ****************************************************************************************/
- function grdf_setGridIsEdit(oGrid){
- oGrid.isDelEdit = false;
- oGrid.isEnterEdit = false;
- oGrid.controltextarea.onkeydown.addHandler(lf_Controltextarea_onkeydown);
- oGrid.controltextarea.onkillfocus.addHandler(lf_Controltextarea_onkillfocus);
- }
- function lf_Controltextarea_onkeydown(obj, e){
- if(e.keycode == 46){ //DEL
- obj.parent.isDelEdit = true;
- }else if(e.keycode == 13){ // Enter
- obj.parent.isEnterEdit = true;
- }
- }
- function lf_Controltextarea_onkillfocus(obj, e){
- obj.parent.isDelEdit = false;
- obj.parent.isEnterEdit = false;
- }
- /***************************************************************************************************
- * Function : grdf_getBindCellName
- * Description : 그리드에서 컬럼 인덱스로 바인드된 데이터셋의 컬럼명을 가져온다.
- * Argument : oTrgtGrid
- : nColumnIndx
- * return type : String
- * Creator : 김상목
- ***************************************************************************************************/
- function grdf_getBindCellName(oTrgtGrid, nColumnIndx){
- var sRtnText = "";
- var sTrgtText = oTrgtGrid.getCellProperty("body", nColumnIndx, "text");
- if(!utlf_isNull( sTrgtText)){
- sRtnText = sTrgtText.replace("bind:", "");
- }
-
- return sRtnText;
- }
- /****************************************************************************************
- * Function : grdf_validGridTime
- * Description : Grid를 시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용)
- * Argument : 01.obj - Grid object
- * : 02.e - GridEditTextChangeEventInfo event
- * : 03.bHalfTime - 12:00 기준인지 여부(defalt는 24:00, true/false)
- * return type : null
- * Creator : 추민수
- ****************************************************************************************/
- function grdf_validGridTime(obj:Grid, e:GridEditTextChangeEventInfo, bHalfTime){
- var sPosttext = utlf_trim((e.posttext).replace(":", "").replace("_", ""));
- var nFirstTime = 2;
- var nSecondTime = 3;
-
- if( !utlf_isNull(bHalfTime) && bHalfTime == true ){
- nFirstTime = 1;
- nSecondTime = 1;
- }
- if( !utlf_isNull(sPosttext.substring(0, 1)) ){
- if( eval(sPosttext.substring(0, 1)) > nFirstTime ){
- obj.setEditText("");
- obj.setEditCaret(0);
- return;
- }
- }
- if( !utlf_isNull(sPosttext.substring(1, 2)) ){
- if( eval(sPosttext.substring(0, 1)) > (nFirstTime-1) ){
- if( eval(sPosttext.substring(1, 2)) > nSecondTime ){
- obj.setEditText(sPosttext.substring(0, 1));
- obj.setEditCaret(1);
- return;
- }
- }
- }
- if( !utlf_isNull(sPosttext.substring(2, 3)) ){
- if( eval(sPosttext.substring(2, 3)) > 5 ){
- obj.setEditText(sPosttext.substring(0, 2));
- obj.setEditCaret(2);
- return;
- }
- }
- }
- /****************************************************************************************
- * Function : grdf_validGridDateTime
- * Description : Grid를 날짜+시간으로 사용할 경우, 부정확한 입력을 제한한다.(ontextchange함수에 사용)
- * Argument : 01.obj - Grid object
- * : 02.e - GridEditTextChangeEventInfo event
- * : 03.bHalfTime - 12:00 기준인지 여부(defalt는 24:00, true/false)
- * return type : null
- * Creator : 추민수
- ****************************************************************************************/
- function grdf_validGridDateTime(obj:Grid, e:GridEditTextChangeEventInfo, bHalfTime){
- var sPosttext = utlf_trim((e.posttext).replace(":", "").replace("_", "").replace("-", "").replace(" ", ""));
- var nFirstTime = 2;
- var nSecondTime = 3;
-
- if( !utlf_isNull(bHalfTime) && bHalfTime == true ){
- nFirstTime = 1;
- nSecondTime = 1;
- }
-
- if( !utlf_isNull(sPosttext.substring(3, 4)) ){
- if( sPosttext.substring(0, 3) == "000" && eval(sPosttext.substring(3, 4)) == 0 ){
- obj.setEditText(sPosttext.substring(0, 3));
- obj.setEditCaret(2);
- return;
- }
- }
-
- if( !utlf_isNull(sPosttext.substring(4, 5)) ){
- if( eval(sPosttext.substring(4, 5)) > 1 ){
- obj.setEditText(sPosttext.substring(0, 4));
- obj.setEditCaret(4);
- return;
- }
- }
- if( !utlf_isNull(sPosttext.substring(5, 6)) ){
- if( sPosttext.substring(4, 5) == "0" && eval(sPosttext.substring(5, 6)) == 0 ||
- sPosttext.substring(4, 5) == "1" && eval(sPosttext.substring(5, 6)) > 2 ){
- obj.setEditText(sPosttext.substring(0, 5));
- obj.setEditCaret(6);
- return;
- }
- }
-
- if( !utlf_isNull(sPosttext.substring(6, 7)) ){
- if( eval(sPosttext.substring(6, 7)) > 3 ){
- obj.setEditText(sPosttext.substring(0, 6));
- obj.setEditCaret(7);
- return;
- }
- }
- if( !utlf_isNull(sPosttext.substring(7, 8)) ){
- if( sPosttext.substring(6, 7) == "0" && eval(sPosttext.substring(7, 8)) == 0 ||
- sPosttext.substring(6, 7) == "3" && eval(sPosttext.substring(7, 8)) > 1 ){
- obj.setEditText(sPosttext.substring(0, 7));
- obj.setEditCaret(9);
- return;
- }
- }
-
- if( !utlf_isNull(sPosttext.substring(8, 9)) ){
- if( eval(sPosttext.substring(8, 9)) > nFirstTime ){
- obj.setEditText(sPosttext.substring(0, 8));
- obj.setEditCaret(10);
- return;
- }
- }
- if( !utlf_isNull(sPosttext.substring(9, 10)) ){
- if( eval(sPosttext.substring(8, 9)) > (nFirstTime-1) ){
- if( eval(sPosttext.substring(9, 10)) > nSecondTime ){
- obj.setEditText(sPosttext.substring(0, 9));
- obj.setEditCaret(12);
- return;
- }
- }
- }
-
- if( !utlf_isNull(sPosttext.substring(10, 11)) ){
- if( eval(sPosttext.substring(10, 11)) > 5 ){
- obj.setEditText(sPosttext.substring(0, 10));
- obj.setEditCaret(13);
- return;
- }
- }
- }
- /****************************************************************************************
- * Function : grdf_controlGridCalendar
- * Description : Grid Calendar 클릭횟수를 줄이기 위한 함수.(oncellclick함수에 사용)
- * Argument : 01.obj - Grid object
- * : 02.e - GridClickEventInfo event
- * return type : null
- * Creator : 윤주호
- ****************************************************************************************/
- function grdf_controlGridCalendar(obj:Grid, e:GridClickEventInfo){
- if( obj.getCellProperty("body", e.col, "edittype") != "date" ) return;
-
- var rSize = 0;
- var oRect = obj.getCellRect(e.row, e.col);
-
- if( !utlf_isNull(oRect) ){
- rSize = oRect.right;
-
- if (e.clientX >= (rSize - 25) && e.clientX < rSize){
- obj.showEditor(true);
- obj.dropdownCalendar();
- }
- }
- }
- /****************************************************************************************
- * Function : grdf_colHidden
- * Description : 그리드 컬럼숨기기 실행. 초기사이즈가 0이면 기본 100으로 사이즈설정
- * : 초기사이즈 0 으로 설정된 컬럼의 경우 그냥 setFormatColProperty 사용권장
- * Argument : 01.obj - Grid object
- * : 02.arrId - 해당컬럼(ex:"col1,col2")
- * : 03.arrYn - 컬럼숨김여부(ex:"Y,N") (Y : 숨기기 , N : 보이기)
- * return type : null
- * Creator : 노회식
- ****************************************************************************************/
- var orgGridColsize = new HashArray();
- function grdf_colHidden(obj:Grid, arrId, arrYn) {
- var arrColnm = arrId.split(",");
- var arrHidYn = arrYn.split(",");
-
- if(arrColnm.length != arrHidYn.length) return;
-
- for(var i = 0 ; i < arrColnm.length ; i++) {
- var orgSize = orgGridColsize.pop(obj.name+"_"+arrColnm[i]);
- if(arrHidYn[i] == "Y") {
- if(!utlf_isNull(orgSize)) obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", parseInt(orgSize));
- orgGridColsize.push(obj.name+"_"+arrColnm[i], obj.getFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size"));
- obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", 0);
- } else {
- if(obj.getFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size") > 0) continue; //이미 size설정된 경우 중지
- if(!utlf_isNull(orgSize)) obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", parseInt(orgSize));
- else obj.setFormatColProperty(obj.getBindCellIndex("body",arrColnm[i]), "size", 100);
- }
- }
- }]]></Script>
|