본문 바로가기
WEB/넥사크로

넥스크로14 피벗 예제 - 동적 그리드 생성

by iiaii 2019. 1. 25.
반응형

소스 


<?xml version="1.0" encoding="utf-8"?>

<FDL version="1.5">

  <TypeDefinition url="..\default_typedef.xml"/>

  <Form classname="sample_dynamicGrid" id="sample_dynamicGrid" inheritanceid="" position="absolute" titletext="Pivot-그리드동적생성" onload="sample_dynamicGrid_onload" left="0" top="0" width="1019" height="870">

    <Layouts>

      <Layout>

        <Grid taborder="0" binddataset="ds_List" id="grd_Sample" cellsizingtype="col" position="absolute" left="16" top="48" height="289" right="16">

          <Formats>

            <Format id="default">

              <Columns>

                <Column size="80"/>

                <Column size="100"/>

              </Columns>

              <Rows>

                <Row band="head" size="23"/>

                <Row band="head" size="23"/>

                <Row size="20"/>

              </Rows>

              <Band id="head">

                <Cell colspan="2" rowspan="2" text="구분"/>

              </Band>

              <Band id="body">

                <Cell suppress="1" text="bind:BRANCH"/>

                <Cell col="1" text="bind:GUBUN"/>

              </Band>

            </Format>

          </Formats>

        </Grid>

        <Button id="btn_createByNexaLib" taborder="2" onclick="btn_createByNexaLib_onclick" position="absolute" text="Nexacro-Lib로 생성" left="163" top="8" width="120" height="24"/>

        <Button id="btn_changeBind" taborder="3" position="absolute" onclick="btn_changeBind_onclick" text="bind 변경 Test" left="299" top="8" width="120" height="24"/>

        <TextArea id="txa_script" taborder="6" position="absolute" left="16" top="345" right="16" bottom="16"/>

        <Button id="btn_createByScript" taborder="7" left="16" top="8" width="131" height="24" onclick="btn_createByScript_onclick" text="Script로 생성"/>

      </Layout>

    </Layouts>

    <Objects>

      <Dataset enableevent="true" firefirstcount="0" firenextcount="0" preload="true" updatecontrol="true" useclientlayout="false" id="ds_List">

        <ColumnInfo>

          <Column id="BRANCH" size="256" type="STRING"/>

          <Column id="GUBUN" size="256" type="STRING"/>

          <Column id="COL_200807" size="256" type="STRING"/>

          <Column id="COL_200808" size="256" type="STRING"/>

          <Column id="COL_200809" size="256" type="STRING"/>

          <Column id="COL_200810" size="256" type="STRING"/>

          <Column id="COL_200811" size="256" type="STRING"/>

          <Column id="COL_200812" size="256" type="STRING"/>

          <Column id="COL_200901" size="256" type="STRING"/>

          <Column id="COL_200902" size="256" type="STRING"/>

          <Column id="COL_200903" size="256" type="STRING"/>

          <Column id="COL_200904" size="256" type="STRING"/>

          <Column id="COL_200905" size="256" type="STRING"/>

          <Column id="COL_200906" size="256" type="STRING"/>

          <Column id="COL_200907" size="256" type="STRING"/>

          <Column id="COL_TEST" size="256" type="STRING"/>

        </ColumnInfo>

        <Rows>

          <Row>

            <Col id="BRANCH">전체</Col>

            <Col id="GUBUN">A</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트1</Col>

          </Row>

          <Row>

            <Col id="BRANCH">전체</Col>

            <Col id="GUBUN">B</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트2</Col>

          </Row>

          <Row>

            <Col id="BRANCH">전체</Col>

            <Col id="GUBUN">C</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트3</Col>

          </Row>

          <Row>

            <Col id="BRANCH">전체</Col>

            <Col id="GUBUN">B-C</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트4</Col>

          </Row>

          <Row>

            <Col id="BRANCH">강남지점</Col>

            <Col id="GUBUN">A</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트5</Col>

          </Row>

          <Row>

            <Col id="BRANCH">강남지점</Col>

            <Col id="GUBUN">B</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트6</Col>

          </Row>

          <Row>

            <Col id="BRANCH">강남지점</Col>

            <Col id="GUBUN">C</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트7</Col>

          </Row>

          <Row>

            <Col id="BRANCH">강남지점</Col>

            <Col id="GUBUN">B-C</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트8</Col>

          </Row>

          <Row>

            <Col id="BRANCH">중앙지점</Col>

            <Col id="GUBUN">A</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트9</Col>

          </Row>

          <Row>

            <Col id="BRANCH">중앙지점</Col>

            <Col id="GUBUN">B</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트10</Col>

          </Row>

          <Row>

            <Col id="BRANCH">중앙지점</Col>

            <Col id="GUBUN">C</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트11</Col>

          </Row>

          <Row>

            <Col id="BRANCH">중앙지점</Col>

            <Col id="GUBUN">B-C</Col>

            <Col id="COL_200807">1</Col>

            <Col id="COL_200808">2</Col>

            <Col id="COL_200809">3</Col>

            <Col id="COL_200810">4</Col>

            <Col id="COL_200811">5</Col>

            <Col id="COL_200812">6</Col>

            <Col id="COL_200901">7</Col>

            <Col id="COL_200902">8</Col>

            <Col id="COL_200903">9</Col>

            <Col id="COL_200904">10</Col>

            <Col id="COL_200905">11</Col>

            <Col id="COL_200906">12</Col>

            <Col id="COL_200907">13</Col>

            <Col id="COL_TEST">bind 테스트12</Col>

          </Row>

        </Rows>

      </Dataset>

      <Dataset enableevent="true" firefirstcount="0" firenextcount="0" preload="true" updatecontrol="true" useclientlayout="false" id="ds_DispDate">

        <ColumnInfo>

          <Column id="YYYYMM" size="256" type="STRING"/>

          <Column id="DISP_HEAD1" size="256" type="STRING"/>

          <Column id="DISP_HEAD2" size="256" type="STRING"/>

        </ColumnInfo>

        <Rows>

          <Row>

            <Col id="YYYYMM">200807</Col>

            <Col id="DISP_HEAD1">08년 3분기</Col>

            <Col id="DISP_HEAD2">7월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200808</Col>

            <Col id="DISP_HEAD1">08년 3분기</Col>

            <Col id="DISP_HEAD2">8월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200809</Col>

            <Col id="DISP_HEAD1">08년 3분기</Col>

            <Col id="DISP_HEAD2">9월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200810</Col>

            <Col id="DISP_HEAD1">08년 4분기</Col>

            <Col id="DISP_HEAD2">10월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200811</Col>

            <Col id="DISP_HEAD1">08년 4분기</Col>

            <Col id="DISP_HEAD2">11월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200812</Col>

            <Col id="DISP_HEAD1">08년 4분기</Col>

            <Col id="DISP_HEAD2">12월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200901</Col>

            <Col id="DISP_HEAD1">09년 1분기</Col>

            <Col id="DISP_HEAD2">1월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200902</Col>

            <Col id="DISP_HEAD1">09년 1분기</Col>

            <Col id="DISP_HEAD2">2월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200903</Col>

            <Col id="DISP_HEAD1">09년 1분기</Col>

            <Col id="DISP_HEAD2">3월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200904</Col>

            <Col id="DISP_HEAD1">09년 2분기</Col>

            <Col id="DISP_HEAD2">4월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200905</Col>

            <Col id="DISP_HEAD1">09년 2분기</Col>

            <Col id="DISP_HEAD2">5월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200906</Col>

            <Col id="DISP_HEAD1">09년 2분기</Col>

            <Col id="DISP_HEAD2">6월</Col>

          </Row>

          <Row>

            <Col id="YYYYMM">200907</Col>

            <Col id="DISP_HEAD1">09년 3분기</Col>

            <Col id="DISP_HEAD2">7월</Col>

          </Row>

        </Rows>

      </Dataset>

    </Objects>

  </Form>

</FDL>


스크립트 

// Form onload
this.sample_dynamicGrid_onload = function (obj:Form, e:LoadEventInfo)
{
application.mainframe.set_openstatus("normal");
}

// XML Tag를 이용한 Dynamic Grid-Column 생성
this.btn_createByScript_onclick = function (obj:Button,  e:ClickEventInfo)
{
var v_Formats = "";
var v_Columns = "";
var v_Rows = "";
var v_BandHead = "";
var v_BandBody = "";

v_Columns += '<Column size="80" />\n';
v_Columns += '<Column size="100" />\n';
v_Rows += '<Row size="23" band="head" />\n';
v_Rows += '<Row size="23" band="head" />\n';
v_Rows += '<Row size="20" />\n';
v_BandHead += '<Cell rowspan="2" colspan="2" text="구분"/>\n';
v_BandBody += '<Cell text="bind:BRANCH" suppress="1"/>\n';
v_BandBody += '<Cell col="1" text="bind:GUBUN"/>\n';
// 포맷 생성
var v_HeadText = '';
var v_HeadColIdx = 2;
var v_BodyColIdx = 2;
for (var i=0; i< this.ds_DispDate.getRowCount(); i++) {
// Column 생성
v_Columns += '<Column size="60" />\n';

// Head 생성
if (v_HeadText != this.ds_DispDate.getColumn(i, "DISP_HEAD1")) {
v_HeadText = this.ds_DispDate.getColumn(i, "DISP_HEAD1");
var v_Colspan = this.ds_DispDate.getCaseCount("DISP_HEAD1=='" + v_HeadText + "'");
// trace(v_Colspan);
// Row 1
v_BandHead += '<Cell col="'+v_HeadColIdx+'" colspan="'+v_Colspan+'" text="'+v_HeadText+'"/>\n';
// Row 2
for (var j=i; j< this.ds_DispDate.getRowCount(); j++) {
if (v_HeadText == this.ds_DispDate.getColumn(j, "DISP_HEAD1")) {
trace("headColindex====> " + v_HeadColIdx);
v_BandHead += '<Cell row="1" col="'+v_HeadColIdx+'" text="'+this.ds_DispDate.getColumn(j, "DISP_HEAD2")+'"/>\n';
v_HeadColIdx++;
}
}
}
// Body 생성
v_BandBody += '<Cell style="align:right;" col="'+v_BodyColIdx+'" displaytype="number" text="bind:COL_'+this.ds_DispDate.getColumn(i, "YYYYMM")+'"/>\n';
v_BodyColIdx++;
}

v_Formats = '<Formats>\n';
v_Formats += '<Format id="default">\n';
v_Formats += '<Columns>\n';
v_Formats += v_Columns;
v_Formats += '</Columns>\n';
v_Formats += '<Rows>\n';
v_Formats += v_Rows;
v_Formats += '</Rows>\n';
v_Formats += '<Band id="head">\n';
v_Formats += v_BandHead;
v_Formats += '</Band>\n';
v_Formats += '<Band id="body">\n';
v_Formats += v_BandBody;
v_Formats += '</Band>\n';
v_Formats += '</Format>\n';
v_Formats += '</Formats>\n';
//trace(v_Formats);
this.grd_Sample.set_enableredraw(false);
this.grd_Sample.set_formats(v_Formats);
this.grd_Sample.set_enableredraw(true);
this.txa_script.set_value(this.grd_Sample.getCurFormatString());
}

// Nexacra에서 제공하는 Lib를 이용한 Dynamic Grid-Column 생성
this.btn_createByNexaLib_onclick = function (obj:Button,  e:ClickEventInfo)
{
// 왼쪽에 고정된 기본칼럼("구분(BRANCH / GUBUN)")을 제외하고 Start Col/Cell 지정
var v_StartCol  = 2;
var v_StartCell = 2;
// 기본컬럼을 제외하고, 기존 Pivot칼럼 모두 삭제 : i>1 조건을 기본칼럼 까지 수정해야 함
for (var i=this.grd_Sample.getCellCount("body"); i>1; i--) {
this.grd_Sample.deleteContentsCol("body",i,false);
}
// ds_DispDate의 Row들이 grd_Sample의 컬럼이 됨으로, 
// ds_DispDate의 Row수 만큼 grd_Sample에 빈 칼럼 추가
for (var i=0; i<this.ds_DispDate.getRowCount(); i++) {
this.grd_Sample.appendContentsCol(false);
}
// Head 1 Level - Merge Cell
var v_CellIdx = v_StartCell;
for (var i=v_StartCell; i<this.grd_Sample.getCellCount("body"); i=i+3) {  // 3 = 3 칼럼씩 묶음
this.grd_Sample.mergeContentsCell("head",0,i,0,i+2,v_CellIdx,false);  // (strBand,nStartRow,nStartCol,nEndRow,nEndCol,nFirstCell,bKeepSubCell)
v_CellIdx++;
}
// Head 1 Level - Set Text
v_CellIdx = 1;
for (var i=0; i<this.ds_DispDate.getRowCount(); i=i+3) {
this.grd_Sample.setCellProperty("head", v_CellIdx, "text", this.ds_DispDate.getColumn(i, "DISP_HEAD1"));
v_CellIdx++;
}
// 컬럼 넓이 지정 & Text 지정 & Column binding
for (var i=v_StartCol; i<this.grd_Sample.getCellCount("body"); i++) {
this.grd_Sample.setRealColSize(i, 60, true);
this.grd_Sample.setCellProperty("head", v_CellIdx, "text", this.ds_DispDate.getColumn(i-v_StartCol, "DISP_HEAD2"));
//this.grd_Sample.setCellProperty("body", i, "displaytype", "number");
//this.grd_Sample.setCellProperty("body", i, "style", "align:right;");
this.grd_Sample.setCellProperty("body", i, "text", "bind:COL_" + this.ds_DispDate.getColumn(i-v_StartCol, "YYYYMM"));
v_CellIdx++;
}
this.txa_script.set_value(this.grd_Sample.getCurFormatString());
}

this.btn_changeBind_onclick = function (obj:Button,  e:ClickEventInfo)
{
// Design 때 생성한 Cell의 bind 정보 변경 ==> OK
this.grd_Sample.setCellProperty("body", 1, "text", "bind:COL_TEST");
// Runtime 때 생성한 Cell의 bind 정보 변경 ==> FAIL
this.grd_Sample.setCellProperty("body", 2, "text", "bind:COL_TEST");
}


반응형