목차

xdataset_multisort 가이드

데이터셋 multisort/multisortbyname API에 대한 예시 화면이다.

multisort/multisortbyname API는 정렬 순서, 정렬 데이터 형식, 정렬 범위, 완료 콜백 함수 지정 기능을 제공한다.

multisort/multisortbyname API는 사용자 정의 정렬 함수 지정 기능을 제공한다.

예시

템플릿 위치: /HTML5/COMPONENT/XDATASET/xdataset_multisort

템플릿 파일

화면 스크립트

/**
 * 데이터셋 사용자 정의 정렬 함수
 * @param objInst XDataset 오브젝트
 * @param nColumn 데이터셋 칼럼 인덱스 (Zero-Based)
 * @param nSortOrder 정렬 순서 (1(ASC)/2(DESC))
 * @param nDataType 데이터 형식 (0(NUMBER)/1(STRING))
 * @param strValueA 비교 대상 값 A
 * @param strValueB 비교 대상 값 B
 * @return 정렬 순서가 1(ASC)인 경우, 아래의 기준에 따름,
           0: strValueA와 strValueB 값이 같은 경우,
           1: strValueA와 strValueB 보다 값이 큰 경우
		   -1: strValueA와 strValueB 보다 값이 작은 경우
		   정렬 순서가 2(DESC)인 경우, 1(ASC)와 반대 값
 */
function XDatasetSortFunc(objInst, nColumn, nSortOrder, nDataType, strValueA, strValueB)
{
	var nValue1, nValueB;

	factory.consoleprint("XDatasetSortFunc> " + nColumn + ", " + nSortOrder + ", " + nDataType);
	factory.consoleprint("XDatasetSortFunc> strValueA = " + strValueA + ", strValueB = " + strValueB);

    if (nDataType == 0) {
        nValueA = parseFloat(strValueA);
        nValueB = parseFloat(strValueB);

        if (nSortOrder == 1) { return nValueA - nValueB; }
        else if (nSortOrder == 2) { return nValueB - nValueA; }
        else { return 0; }
    }
	else {
	    if (strValueA == strValueB) { return 0; }
	    if (nSortOrder == 1) { return strValueA > strValueB ? 1 : -1; }
	    else if (nSortOrder == 2) { return strValueA > strValueB ? -1 : 1; }
	    else { return 0; }
	}

	return 0;
}

/**
 * XDataset multisort API에서 콜백 함수 지정시
 * @param objInst XDataset 오브젝트
 */
function XDatasetSortCallback(objInst, nSortStartTime)
{
	var objEndDate, nSortEndTime, nElapseSecond;

	objEndDate = new Date();
	nSortEndTime = objEndDate.getTime();

	nElapseSecond = (nSortEndTime - nSortStartTime) / 1000;

	factory.consoleprint("XDatasetSortCallback> ID = " + objInst.getid() + ", SortTime = " + nElapseSecond);
}

function btn_multisort_on_mouseup(objInst)
{
	var nStartRow, nEndRow;

	if (this.chkRange.getcheck()) {
		nStartRow = this.fldStartRow.gettext();
		nEndRow = this.fldEndRow.gettext();
	}

	// this.DS_DATA.multisort("2:ASC:1:,0:DESC:1:XDatasetSortFunc", "XDatasetSortCallback");
	this.DS_DATA.multisortbyname("NUMBER:ASC:1:,ENGLISH:DESC:1:XDatasetSortFunc", "XDatasetSortCallback", nStartRow, nEndRow);
}

function btn_datatypesort_on_mouseup(objInst)
{
	var nStartRow, nEndRow;

	if (this.chkRange.getcheck()) {
		nStartRow = this.fldStartRow.gettext();
		nEndRow = this.fldEndRow.gettext();
	}

	if (this.chkNumber.getcheck()) {
		// NUMBER 컬럼을 기준으로 숫자 형식으로 정렬
		// this.DS_DATA.multisort("2:ASC:0:", "XDatasetSortCallback", nStartRow, nEndRow);
		this.DS_DATA.multisortbyname("NUMBER:ASC:0:", "XDatasetSortCallback", nStartRow, nEndRow);
	}
	else {
		// NUMBER 컬럼을 기준으로 문자열 형식으로 정렬
		// this.DS_DATA.multisort("2:ASC:1:", "XDatasetSortCallback", nStartRow, nEndRow);
		this.DS_DATA.multisortbyname("NUMBER:ASC:1:", "XDatasetSortCallback", nStartRow, nEndRow);
	}
}

function grdList_on_sortcomplete(objInst, nSortStartTime)
{
	factory.consoleprint("grdList_on_sortcomplete> Sort Complete, nSortStartTime = " + nSortStartTime);
}

function screen_on_load()
{
}