본문 바로가기

Paul Work/Tool

[MiPlatfrom] 그리드 구조 세팅






grd_list.Contents;
============================================================================================
<contents>
<columns>
<col filx="true" width="260"/>
</columns>
<head>
<cell bkcolor="#e3eef2" col="0" display="text" text="손익지표" wordwrap="word"/>
</head>
<body>
<cell align="left" bkimagealign="left" col="0" colid="COL0" display="text"/>
</body>
</contents>
============================================================================================

function fcSetCrossTab() {
    grd_list.BindDataset = "";   
    lFcSetCrossTabDim("ds_list", "ds_dim1", "ds_dim2",
                      "POSITION_CODE", "KOR_NAME",
                      "CMS_ORG_CODE", "CMS_ORG_NAME");                                      // 디멘젼 세팅
    lFcSetCrossTabDS("ds_content", "ds_list", "ds_dim1", "ds_dim2", "AMT", "LV");    // 컨텐츠 데이터셋을 세팅
    fcSetCrossTabGrid("grd_list", "ds_dim2");                                                         // 그리드의 구조 세팅
    grd_list.BindDataset = ds_content.ID();
    ds_content.row = 0;
   
    lFcSetTree("ds_content", "COL0", "LV", "SHOW", 1);                                           // 트리구조 세팅
}

/*
 * 크로스탭 컨텐츠 데이터셋 세팅
 *
 * param obj_content - 실제 컨텐츠를 세팅할 데이터셋
 * param objList - 원본 데이터셋
 * param objDim1 - 디멘젼1 데이터셋
 * param objDim2 - 디멘젼2 데이터셋
 * param sMeasure - 메져컬럼
 * param sEtcCol - 디멘젼1에 대응하는 키타컬럼들("COL1,COL2,...,COL100") 형식으로 여러개 쓸 수 있다.
 *
 */
function lFcSetCrossTabDS(obj_content, obj_list, obj_dim1, obj_dim2, sMeasure, sEtcCol) {   
    var ds_content = Object(obj_content);
    var ds_list = Object(obj_list);
    var ds_dim1 = Object(obj_dim1);
    var ds_dim2 = Object(obj_dim2);   
   
    ds_content.Clear();
    var nRowCnt = ds_dim1.RowCount();
    var nColCnt = ds_dim2.RowCount();
    var sCol = split(sEtcCol, ",");
   
    /* 컬럼을 추가한다. */
    for(var i = -1; i < nColCnt; i++) {
        ds_content.AddColumn("COL" + ToString(i + 1));
    }   
    for(var i = 0; i < sCol.length; i++) {
        ds_content.AddColumn(sCol[i]);
    }
   
    /* 각각의 컬럼에 값을 세팅한다. */
    for(var i = 0; i < nRowCnt; i++) {
        ds_content.AppendRow();    
        ds_content.SetColumn(i, "COL0", ds_dim1.GetColumn(i, "NAME"));
       
        for(var j = 0; j < nColCnt; j++) {
            ds_content.SetColumn(i, "COL" + ToString(j + 1), ds_list.GetColumn(j + i * nColCnt, sMeasure));
        }
       
        for(var k = 0; k < sCol.length; k++) {
            ds_content.SetColumn(i, sCol[k], ds_list.GetColumn(i * iif(nColCnt == 0, 1, nColCnt), sCol[k]));
        }
    }
}



function fcSetCrossTabGrid(obj_grdList, obj_dim2) {
    var grd_list = Object(obj_grdList);
    var ds_dim2 = Object(obj_dim2);
    grd_list.Contents = sOldGridContents;
   
    var nCellCnt = ds_dim2.RowCount();
    var sContent = grd_list.Contents;
    
    var sColContent = "";
    var sHeadContent = "";
    var sBodyContent = "";
   
    var nColPos = pos(sContent, "</columns>");
    var nHeadPos = pos(sContent, "</head>");
    var nBodyPos = pos(sContent, "</body>");
   
    for(var i = 0; i < nCellCnt; i++) {
        sColContent += "<col width='90'/>" + "\n";
        sHeadContent += "<cell bkcolor='#e3eef2' col='" + ToString(i + 1) +
                        "' display='text' text='" + ds_dim2.GetColumn(i, "NAME") +
                        "' wordwrap='word'/>";
        sBodyContent += "<cell align='right' col='" + ToString(i + 1) +
                        "' colid='COL" + ToString(i + 1) + "' display='number'/>";
    }
   
    grd_list.Contents = Mid(sContent, 0, nColPos) + "\n" +
                        sColContent +
                        Mid(sContent, nColPos, nHeadPos - nColPos) + "\n" +
                        sHeadContent +
                        Mid(sContent, nHeadPos, nBodyPos - nHeadPos) + "\n" +
                        sBodyContent;
}