# loadSearchData (method)

> JSON형식의 데이터를 시트에 바인딩합니다. AJAX 통신 없이 데이터만 로드합니다.
> SearchMode 0, 1, 2에서 사용합니다.
> AJAX 통신이 필요한 경우 doSearch를 사용하세요.
> 비동기형식으로 동작하므로, 데이터 로드 후 처리는 onReceiveData, onBeforeDataLoad, onDataLoad 이벤트에서 구현해야 합니다.
> 기본적으로 `loadSearchData`는 시트의 기존 데이터를 제거하고 데이터를 로드합니다.
> 기존 데이터 뒤에 새 데이터를 추가하려면 `append: true` 옵션을 사용하세요.
> 데이터는 새로 로드되지만 기존 필터와 정렬 상태는 유지되어 새 데이터에 다시 적용됩니다. 조회 시 이를 초기화하려면 조회 전에 clearFilter나 clearSort를 호출하세요.
> JSON 데이터 구조와 관련된 상세 내용은 조회 응답 규격을 참고하세요.
> 조회 시 자동 포커스 (Cfg)IgnoreFocused, 메시지 표시 (Cfg)SuppressMessage, 프로그레스바 (Cfg)SearchProgress를 참고하세요.

### Syntax

    void loadSearchData( data, append, callback, sync, next, strictParse, parent, ignoreEvent );

### Parameters

Name | Type | Required | Description
--- | --- | --- | ---
data | `string` | `object` | `array` | 필수 | JSON형식의 데이터 `{Data:[{...}]}`, `'{Data:[{...}]}'`, `[{...}]` 형태 모두 가능
append | `boolean` | 선택 | 기존 데이터 하단에 `append` 여부 조회 방식의 차이로 인해 `append:1(true)`사용 시 SearchMode:2인 경우 onRenderFinish이벤트가 발생하지 않습니다. `0(false)`:기존 데이터 제거 후 조회 데이터 로드 (`default`) `1(true)`:기존 데이터에 조회 데이터 추가
callback | `function` | 선택 | 조회 후 호출할 콜백 함수 ex) `sheet`: 시트 객체, `data`: 조회 데이터, `result(0)`: 조회 성공
sync | `boolean` | 선택 | 동기 조회 여부. `0(false)`: 비동기 방식 (`default`) `1(true)`: 동기 방식
next | `object` | 선택 | 데이터 로우 객체 지정한 행 위에 데이터가 추가됨. (`append:1(true)`일때만 사용 가능)
strictParse | `boolean` | 선택 | JSON 파서 선택 `0(false)`:유연한 파서 사용 (`default`) — 여분의 콤마, 프로퍼티 이름 쌍따옴표 생략 허용 `1(true)`:브라우저 JSON.parse() 사용 (약 5배 빠르나 5만건 이내에서는 차이 미미)
parent | `object` | 선택 | 데이터 로우 객체 (동적 트리 조회 사용시 부모에 해당하는 행 지정)
ignoreEvent | `boolean` | 선택 | 조회 관련 이벤트를 발생시키지 않도록 하는 인자 `0(false)`:조회 관련 이벤트를 발생 시킴 (`default`) `1(true)`:조회 관련 이벤트를 발생 시키지 않음

### Return Value

none

### Example

    var DATA = {"Data":[
        {"EMP_ID":"08212","EMP_NM":"홍길동","DEPT_CD":"031"},
        {"EMP_ID":"07417","EMP_NM":"허균","DEPT_CD":"120"},
        {"EMP_ID":"02600","EMP_NM":"홍판서","DEPT_CD":"405"},
    ]};

    // 기본 조회 — 기존 데이터를 제거하고 로드
    sheet.loadSearchData(DATA);

    // 기존 데이터 밑에 데이터를 append
    sheet.loadSearchData(DATA, 1);

    // 지정한 행 위에 데이터가 추가됨
    sheet.loadSearchData({ data: DATA, append: true, next: sheet.getRowByIndex(3) })

    // Level 기반 트리 데이터를 Items 구조로 변환하여 로드
    // 최상위 노드는 0, 하위 노드는 부모보다 1씩 증가
    var treeData = {
        "Data":[
            {Level:0, sProduct:"내부 시스템 개발 사업", sKind:"프로젝트", sPrice:"29"},
            {Level:1, sProduct:"글로벌 통합 인사시스템", sKind:"프로젝트", sPrice:"192"},
            {Level:2, sProduct:"물산 E-HR시스템", sKind:"기타", sPrice:"4"},
            {Level:2, sProduct:"제조 E-HR시스템", sKind:"기타", sPrice:"4"},
        ]
    };
    var convertData = IBSheet.v7.convertTreeData(treeData);
    sheet.loadSearchData(convertData);

    // 대기 이미지 처리 (jQuery BlockUI 사용 예시)
    // 대기 이미지는 렌더링 완료 후 onSearchFinish에서 닫는 것을 권장합니다.
    $.ajax({
        url: "./insaAppMain.do",
        method: "POST",
        data: { dept_cd: "031" },
        beforeSend: function() {
            $.blockUI();
        },
        success: function(data) {
            sheet.loadSearchData(data);
            // $.unblockUI(); // 여기서 닫으면 시트에 데이터가 렌더링 되기 전에 닫힘
        },
        error: function() {
            alert("조회에 실패했습니다.");
            $.unblockUI();
        }
    });

    // 렌더링 완료 후 대기 이미지 닫기
    options.Events = {
        onSearchFinish: function(evtParam) {
            $.unblockUI();
        }
    }

### Read More

- SearchMode cfg
- 조회 이벤트 발생 순서
- 조회 응답 규격
- 트리 응답 규격
- doSearch method
- doSearchPaging method
- clearSort method
- clearFilter method
- onBeforeDataLoad
- onDataLoad event
- onReceiveData event
- SuppressMessage cfg
- SearchProgress cfg

### Since

product | version | desc
--- | --- | ---
core | 8.0.0.0 | 기능 추가
core | 8.0.0.6 | `sync` 인자 추가
core | 8.0.0.7 | `next`, `strictParse` 인자 추가
core | 8.0.0.25 | `parent` 인자 추가