DevExpress QuantumGrid 사용법 009 – 2/2 ( Provider Mode )

퀀텀 그리드에서 DB를 연결하지 않고 데이타를 출력하는 방법에는 Unbound Mode( 일반 String Grid 처럼 입력하는 방법 ) 와 Provider Mode( 사용자가 임의로 CustomerDataSource를 생성하여 구성하는 방법 )이 있습니다.

가장 많이 사용되는 방법은 Unbound Mode입니다. 하지만, 가끔은 Provider Mode로 작업을 해야 하는 경우가 있습니다.

Provider Mode는 일반 DBGrid처럼 DataSource를 연결하는 방식이 아니라 사용자가 직접 TcxCustomDataSource라는 Class를 상속받아 데이타를 직접 관리하는 방법입니다.

이번 내용도 역시 본 제작자가 이동 또는 게시하지 않는 경우를 제외하고는 이곳 외에 다른 곳에서 볼 수 없습니다. 이를 어 길시 정말 법적 제제가 가해질 수 있습니다.

Provider Mode는 사용자가 제작한 Class와 퀀텀에서 제공하는 TcxCustomDataSource를 상속받아 데이타를 표현하는 방법이므로 처음에는 그리 만만한 작업이 아닙니다. 특히 Unbound모드에 비해 코딩량이 꽤나 많이 필요로 합니다.

Provider Mode는 데이타를 클래스로 표현하는 방법이기때문에 아래와 같은 작업 순서가 필요합니다.

  • Column을 담을 Class를 생성합니다.
  • Record들을 담을 Class를 생성합니다.
  • TcxCustomDataSource를 상속받아 데이타를 관리할 Classs를 생성합니다.

아래 예제는 DBDemos의 Animals.dbf의 내용을 표현하는 용도로 만들어진 Class들입니다.

Column을 담을 Class

컬럼을 담을 Class이지만 정확히 따지고 보면, 한레코드를 담을 class입니다.

여기서 fFieldList라는 변수를 가변형 배열로 선언하고 Class가 생성될때 배열의 크기를 정합니다.
Variant형을 선언하여 어떤 내용이던 담을수 있도록 하였습니다.

레코드들을 담을 Class

 

TAnimalList Class의 용도는 TAnimal Class를 담고 있을 Class입니다.
핵심은 TList를 이용하여 TAnimal Class를 담아관리 한다는 것입니다.
TAnimal Class는 한개의 레코드이고 TAnimalList는 레코드를 모아놓은 Table과 같은 역활을 합니다.
그래서, TAnimalList Class를 보면 FFieldCnt를 이용하여 TAnimal Class에 Record의 Field개수를 정의하고, TAnimal Class를 TList에 저장합니다.

데이타를 담을 클래스를 정의하고 난뒤에 이를 관리할 Class를 생성합니다. TcxCustomDataSource는 기본원형을 퀀텀에서 제공하고 아래 표시된 Function과 Procedure를 정의 해야 합니다.


Protected에 표시된 내용은 반드시 정의해야 하는 내용으로 이 이상 정의할것도 별로 없습니다.

생각보다는 어렵지 않습니다.
Table+DataSource = Class + TcxCustomDataSource = TAnimalList + TcxCustomDataSource 라는 등식이 성립됩니다. 결국 레코드를 만들고( TAnimal ) 레코드를 모아 테이블( TAnimalList )을 만들고  TcxCsutomDataSource를 통해 관리 하는겁니다.

이제 데이타를 넣고 컬럼을 만드는 작업을 살펴보도록 하겠습니다.

우선 변수를 선언합니다. 물론 아래 내용은 전역 또는 DataModule 또는 TForm안에 선언 되어야 할것입니다.

그리고 컬럼을 만듭니다. 구찮아서 컬럼과 데이타를 한번에 만들고 불러오도록 만들었습니다.

복잡해 보이지만 실제로는 그리 복잡해 보이지 않습니다.
요기까지 Provider Mode를 알아 보았습니다. Mater-Detail 방법은 퀀텀 그리드의 데모를 참고해 주시기바랍니다.

 

Author: yyjksw