넥사크로 그리드 expr text - negsakeulo geulideu expr text

넥사크로 그리드 expr text - negsakeulo geulideu expr text

여기 그리드가 하나 있다

근데 RAISE 부분에는 %가 추가로 붙어야 하는데

DB에서는 %를 붙여 가져올 수가 없는 경우에

DB를 수정하지 않고 넥사크로 그리드만 고쳐

RAISE 컬럼 뒤의 값에 %를 붙여보자

넥사크로 그리드 expr text - negsakeulo geulideu expr text

먼저 그리드를 더블 클릭 후 %를 붙이려는 컬럼을 선택하자

넥사크로 그리드 expr text - negsakeulo geulideu expr text

이후 text 속성의 우측에서 Set Expression을 발견할 수 있는데

이걸 누르고

넥사크로 그리드 expr text - negsakeulo geulideu expr text

컬럼명(DB에서 가져와 그리드와 바인드 시킨 값) + '%'을 하면

넥사크로 그리드 expr text - negsakeulo geulideu expr text

짜잔! 숫자 뒤에 %가 붙여진 것이 보인다

단순히 텍스트를 붙이려면 Set Expression을 누르고 Expr을 통해

컬럼명(DB에서 가져와 그리드와 바인드 시킨 값) + '원하는 텍스트'; 

를 하면 되는 것이다

넥사크로 그리드 expr text - negsakeulo geulideu expr text

다음은 행 추가 버튼을 누를 시에

자동으로 값 + 번호1,2,3 이런 식으로 올라가게 만들어 보자

넥사크로 그리드 expr text - negsakeulo geulideu expr text

동일하게 Set Expression을 누르고

컬럼명 or '값' + (currow+1)

을 해 주면

넥사크로 그리드 expr text - negsakeulo geulideu expr text

행 추가를 누를 때마다 번호 뒤에 숫자가 올라가면서 추가되는 것이 보인다

Grid 에서 사용할 수 있는 Expr

Grid의 순번 매기기 

// 순서대로 진행 0부터 시작 된다.
expr:rowidx

// 1부터 하려면
expr:rowidx + 1

전체 데이터 셋의 갯수(카운트) 확인

//총 데이터셋의 갯수 표현
expr:dataset.rowcount

응용1. Grid의 순번을 역순으로 표현하기

//순번을 역순으로 표현하기

//총 데이터셋 숫자 - rowidx 

expr:dataset.rowcount - rowidx

Expr을 Script에서 사용 하고 싶다면~

// setCellProperty 를 사용한다.
// Grid의 ID값이 this.tab.grdMain 이라면

this.tab.grdMain.setCellProperty("body", col, "text", "expr:dataset.rowcount-rowidx")

※ 참고 사항 : 만약 Script에서 Expr을 사용 하는 경우, 쌍따옴표(")를 써야 한다면 역슬러쉬(\)를 붙여 주면 된다. 

//따옴표를 써야 한다면 반드시 역슬러쉬를 붙여 주자.

this.mainTab.t1.form.signTab.t2.form.grdFirstA.setCellProperty("body", 4, "text", 
	"expr:SIGN_GBN==1?'<fc v=\"blue\"><b v=\"true\">Approved</b></fc>   '+SIGN_DATE:(SIGN_GBN==2?'<fc v=\"red\"><b v=\"true\">Rejected</b></fc>   '+SIGN_DATE:'')"

해당 글은 제가 Expr 관련 항목을 정리 할때 마다 계속 추가할 예정입니다.

Intro.

지난 기고문에 이어 그리드 Expr을 활용하는 방법 중 데이터셋과 사용자함수를 이용한 활용 방법을 공유하도록 하겠다.

how to expr

그리드 소계 텍스트를 Expr를 통해 설정하는 예시를 단계별로 설명하여 데이터셋 예약어 사용 및 사용자함수를 구현하는 방법에 대해 공유한다.

그리드에 소계를 표현하는데 소계 Row에 “소계”라는 텍스트를 출력하고 싶어요.

1. getRowLevel() 함수를 통해 현재 Row의 레벨 값을 구한다.

2. 레벨값이 0일 경우 기존 컬럼 정보를 보여준다.

3. 레벨값이 0 아닐 경우 [소계]를 보여준다.

4. 위의 기능을 Expr로 구현한다.

Expr에 적용할 스크립트를 작성해 보면 다음과 같이 사용할 수 있다.

 expr 수식 : dataset.getRowLevel(currow) != 0 ?  ”소계” : [컬럼명]

소계 텍스트가 아니라 컬럼데이터 + 소계를 텍스트로 출력하고 싶어요.

1. 위와 같이 설정한다.

2. 레벨값이 0이 아닐 경우 currow - 1에 해당하는 컬럼값과 [소계]를 같이 표현한다.

Expr에 적용할 스크립트를 작성해 보면 다음과 같이 사용할 수 있다.

expr 수식 : dataset.getRowLevel(currow) !=0 ? dataset.getColumn(currow-1) + ” 소계” : [컬럼명]

그룹 2개 이상의 컬럼데이터 + 소계를 출력하고 싶어요.

좀더 복잡한 수식이 필요하므로 expr로 설정하여 관리하기 힘들 수 있다. 이럴 경우 사용자함수를 통해 expr을 설정하도록 한다.

expr 수식 : dataset.parent.fnGetSubsumText(dataset , currow)


이때 사용자 함수가 선언된 폼의 scope을 찾는데 주의가 필요하다. 그리드의 부모가 해당 폼일 경우의 scope는 다음과 같다.

Form Component > Grid Component

그렇다면 expr에서 접근하기 위해  [comp.parent.사용자함수명] 와 같이 작성하면 사용 할 수 있다. 하지만 그리드의 부모가 해당 폼이 아니고 중간에 Div가 하나 추가된다면  그리드와 폼까지의 scope는 다음과 같다.

Form Component > Div Component > Form Component(Div 내부폼) > Grid Component

이 경우 해당 함수에 접근하기 위해 [comp.parent.parent.parent.사용자함수]와 같이 작성이 필요하고 scope의 깊이가 깊을수록 스크립트 작성이 어려워 진다. 필자의 경우 그리드에 바인드된 데이터셋의 경우 주로 해당 폼에 있는 데이터셋을 사용하므로 [dataset.parent.사용자함수명] 방식을 선호한다. (대부분 로컬 or 글로벌 데이터셋 둘 중 하나다.)

사용자 함수에 작성된 스크립트를 정리하면 다음과 같다.

this.fnGetSubsumText = function (dataset, currow)
{
	var sRtnString = "";
	var nRowLevel = dataset.getRowLevel(currow);

  if(nRowLevel==2)
  {
  	sRtnString = dataset.getColumn(currow-nRowLevel, "Column1") + " 소계";
  }else if(nRowLevel==1)
  {
  	sRtnString = dataset.getColumn(currow-nRowLevel, "Column2") + " 소계"
  }else
  {
  	sRtnString = dataset.getColumn(currow-nRowLevel, "Column1");
  }
  return sRtnString;
}

PS.

만약 추가적인 expr 활용 방법이 궁금하다면 Feedback 메뉴를 통해 요청하길 바란다. 참고로 데이터셋의 findRow(), getSum(), getCaseSum()등과 같은 함수도 expr 구문을 사용할 수 있고 이를 활용한 데이터 집계 처리 및 데이터 찾기가 가능하다.

플레이넥사크로 바로가기

https://www.playnexacro.com/

play nexacro

A community of nexacro platform.

www.playnexacro.com

넥사크로 그리드 expr text - negsakeulo geulideu expr text