DevExpress QuantumGrid 사용법 006 (2/4)( Tutorial – 004 : Footer, GroupFooter, Incremental Search 사용법 )

전장까지 가장 기본적인 사용법을 기술하였습니다.
이번장은 퀌텀의 가장 큰 특징인 Footer, Hroup Footer, Incremental Search의 사용법에대해 알아 보려 합니다.

요즘 필자가 갑자기 백수가 되는 관계로 인해 맥주를 한잔 하자는 여러 부류의 압박에 의해 글을 빨리 올리지 못하는 일이 발생하고 있습니다. 이해해 주시기 바랍니다.

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

이번장에 해야 하는 작업은
-. Incremental Search 구현해보기.
-. Footer, GroupFooter 구성하기.
-. StyleRepository 이용하여 꾸미기 등입니다.
-. 그리드의 모양 그대로 프린트 하기.
좀 많네요 ㅜ.ㅜ 뭐 그런대로 작업해 보도록 하겠습니다.

-. Incremental Search 

퀀텀 그리드는 Incremental Search를 지원합니다. 물론 Item( Column )을 지정해서 찾을수도 있지만 일반적으로는 FocusCell의 내용에 따라 찾는것이 대부분 입니다.
단지 한가지 단점은 퀀텀의 Incremental Search는 한글을 지원하지 않습니다. 국내에선 치명적이지요.
따라서, 아래처럼 해결을 합니다. ( 아래처럼 하면 코딩으로 IncSearch를 해결하는 것이기 때문에 DBBandedTableView –> OptionsBeharvior –> IncSearch의 내용을 True로 하지 않아도 검색이 됩니다. 또, IncSearchItem을 지정하지 않은시는게 여러모로 도움이 됩니다.)

우선 폼에 Label과 Edit를 올려 놓습니다.
Label의 이름은 LBL_IncSearch라 정하고, Edit를 EDT_IncSearch라 정하기로 하였습니다.
DBBandedTableView에 onCustomDrawCell이벤트에 아래와 같이 코딩을 합니다.

 

보시는 바와 같이 Cell을 그릴때마다 셀의 값이 Focused되면 Focus된 셀의 Caption(Header)을 Label의 Caption으로 변경합니다. 그럼 사용자가 Cell을 이동할때마다 검색내용의 Label이 변경되어 보기 좋을겁니다만, 실제로는 정신 없어 하더군요.

이제 Edit event에 OnChange이벤트에 아래와 같이 코딩하시면, 어떤값이 입력되던 퀀텀이 찾아 줍니다.
단, 포커스된 Row부터 찾아 주기때문에 찾으시려는 Column을 미리 Sort하면 좋겠지만, 이건 사용자의 몫이니 교육을 잘해야 하는 부담이 생깁니다.

procedure TFRM_SimpleTest.cxTextEdit1PropertiesChange(Sender: TObject);
begin
BandTV_Simple.Controller.IncSearchingText := EDT_IncSearch.Text;
end;

자 이렇게 설정을 하시면, Edit에 입력하는 값에 따라 자동으로 그리드가 값을 찾아 위치를 이동합니다.
(실제로는 퀀텀도 Locate문을 사용하여 검색합니다. )
그럼.. 여기서 문제. 다음 조건에 일치하는 넘은 어떻게 찾아야 하나요?

IncSearch는 내부적으로 Locate문을 사용한다고 말씀드렸습니다. 따라서, 귀찮게 Locate를 쓰는 것보다 훨씬 비주얼 하기때문에 incSearch를 씁니다. 하지만, 다음값을 찾으려 한다면, LocateNext( true )를 사용합니다.

  BandTV_Simple.DataController.Search.LocateNext( True );

LocateNext( True )는 하위로 내려가면서 검색합니다. LocateNext( False )는 상위로 검색합니다.

참고 : Locate문을 이용할때는 어떻게 해야 할까요?

BandTV_Simple.DataController.Search.Locate(
BandTV_Simple.Controller.FocusedColumn.Index ,
EDT_IncSearch.Text
);

BandTV_Simple.Controller.FocusedColumn.Index 이부분이 중요합니다. FocusedColumnIndex은 FocusedColumn.VisibleIndex입니다. 따라서, 실제 Column의 Index가 아니어서 엉뚱한넘을 검색하게 됩니다.

초간단 초 스피드로 IncSearch부분을 살펴 보았습니다. 술이 덜깨서 왔다갔다 하네요…

Author: yyjksw