[Nexacro N] 트러블슈팅: Grid가 렌더링되지 않을 때

Nexacro N에서 Grid 컴포넌트가 데이터를 표시하지 않는 문제를 진단하고 해결하는 방법을 설명합니다. Dataset 연결, binddataset 속성, GridFormat, 렌더 타이밍 문제를 다룹니다.

· 4 min read · PALDYN Team

지난 글에서 Dataset이 비어 있는 문제를 다루었다. 이번에는 Dataset에는 데이터가 있는데 Grid가 아무것도 표시하지 않는 문제를 살펴본다. dsResult.rowcount를 출력했을 때 정상적인 건수가 찍히는데도 Grid가 비어 보일 때의 원인과 해결책이다.

Grid 렌더링 파이프라인

Grid가 데이터를 표시하기까지는 네 단계를 거친다.

Grid 렌더링 파이프라인

이 파이프라인의 각 단계를 하나씩 확인하면 원인을 빠르게 좁힐 수 있다.

체크 1: binddataset 속성

Grid의 binddataset 속성이 실제 Dataset 이름과 정확히 일치하는지 확인한다.

// 코드로 binddataset 확인 및 설정
trace("binddataset: " + grd_result.binddataset);

// binddataset이 비어 있다면 코드로 설정
grd_result.set_binddataset("dsResult");

Studio에서는 Grid를 선택하고 Properties 창의 binddataset 항목에서 직접 입력한다. Dataset 이름은 대소문자를 구분한다.

체크 2: GridFormat 컬럼 정의

GridFormat에 컬럼이 하나도 정의되어 있지 않으면 데이터가 있어도 표시되지 않는다.

// 컬럼 수 확인
trace("Grid 컬럼 수: " + grd_result.formats.getCount());

Studio에서 Grid를 더블클릭하면 Format Editor가 열린다. Head/Body/Summary에 컬럼이 정의되어 있는지 확인한다. Body 컬럼의 bindcolumn 속성도 Dataset 컬럼 이름과 일치해야 한다.

체크 3: 렌더 타이밍 (가장 흔한 원인)

Dataset에 데이터가 있는데도 Grid가 비어 보이는 가장 흔한 원인은 트랜잭션 콜백 전에 Grid 갱신을 시도하는 것이다.

Grid 렌더링 수동 갱신 패턴

// 문제: 응답을 기다리지 않음
function fn_search() {
    this.transaction("search", url,
        "dsInput=dsSearch", "dsOut=dsResult", "", "");

    // ← 이 시점에는 dsResult가 아직 비어 있음
    grd_result.setRedraw(true); // 소용없음
}

// 해결: 콜백에서 처리
function fn_search() {
    this.transaction("search", url,
        "dsInput=dsSearch", "dsOut=dsResult",
        "", "fn_searchCb");
}

function fn_searchCb(svcId, errCode, errMsg) {
    if (errCode != 0) { gfn_alert(errMsg); return; }
    // 이 시점에 dsResult에 데이터가 채워짐
    // binddataset이 설정되어 있으면 자동 갱신됨
    // 수동 갱신이 필요한 경우
    grd_result.setRedraw(true);
}

체크 4: Grid visible / 크기

Grid 자체의 visible, width, height를 확인한다.

trace("grd visible: " + grd_result.visible);
trace("grd width:   " + grd_result.width);
trace("grd height:  " + grd_result.height);

부모 컨테이너의 크기가 0이거나 overflow hidden 상태라면 Grid가 표시되지 않는다.

체크 5: 필터/정렬 상태

코드에서 setFilter 또는 setSort를 호출한 경우, 모든 행이 필터링되어 표시되지 않는 것일 수 있다.

// 필터 해제
dsResult.clearFilter();

// 정렬 해제
dsResult.clearSort();

// 현재 필터 확인
trace("filter: " + dsResult.filterstr);

강제 갱신 방법

위 모든 체크 후에도 Grid가 표시되지 않는다면 강제 갱신을 시도한다.

function fn_forceRedraw() {
    // binddataset 재연결
    grd_result.set_binddataset("");
    grd_result.set_binddataset("dsResult");

    // 또는 setRedraw 강제 호출
    grd_result.setRedraw(true);

    trace("강제 갱신 후 rowcount: " + dsResult.rowcount);
}

정리: Grid 렌더링 체크리스트

확인 항목확인 방법
binddataset 이름 일치Properties 창 또는 trace(grd.binddataset)
GridFormat 컬럼 정의Format Editor 열기
데이터 접근 타이밍콜백 이후에만 접근
Grid visible/크기Properties 또는 trace
필터/정렬 상태dsResult.filterstr 확인

지난 글: 트러블슈팅: 빈 Dataset

다음 글: 트러블슈팅: 메모리 누수


읽어주셔서 감사합니다. 😊