var
AValueList: TcxGridFilterValueList;
I: Integer;
begin
AValueList := cxGrid1TableView1.ViewData.CreateFilterValueList;
try
cxGrid1TableView1Column1.DataBinding.GetFilterValues( AValueList , True, False, True);
with ListBox1.Items do
begin
BeginUpdate;
try
for I := 0 to AValueList.Count - 1 do
Add(AValueList[I].Value);
finally
EndUpdate;
end;
end;
finally
AValueList.Free;
end;
출처: http://eaglesoft.tistory.com/204
cxGrid의 내용을 필터를 걸때 사용하는 방법입니다.
일반적인 방법과 다중 조건을 거는 방법 2개를 올립니다.
단일 조건의 경우
OR 조건을 이용하여 필터를 거는 방법입니다.
( 컬럼1 like '%찾는값%' ) or ( 컬럼2 like '%찾는값%' )
위와 같은 경우 아래와 같이 코딩합니다.
그리드TV.DataController.Filter.Clear;
그리드TV.DataController.Filter.Root.BoolOperatorKind := fboOr;
그리드TV.DataController.Filter.Root.AddItem(첫번째 그리드 컬럼, foLike, '%' + 찾을값 + '%', 필터내용을 화면에표시할내용 );
그리드TV.DataController.Filter.Root.AddItem(두번째 그리드 컬럼, foLike, '%' + 찾을값 + '%', 필터내용을 화면에표시할내용 );
그리드TV.DataController.Filter.Active := true;
다중 조건을 거는 방법
상위는 And이고 하위는 OR 조건을 이용하여 필터를 거는 방법입니다.
( ( 컬럼1 = '찾는값' ) or ( 컬럼2 = '찾는값' ) )
AND
( ( 컬럼3 = '찾는값' ) or ( 컬럼4 = '찾는값' ) )
위와 같은 경우 아래와 같이 코딩합니다.
그리드TV.DataController.Filter.BeginUpdate;
그리드TV.DataController.Filter.Active := False;
그리드TV.DataController.Filter.Clear;
그리드TV.DataController.Filter.Root.BoolOperatorKind := fboAnd;
첫번째Filter := 그리드_증상tv.DataController.Filter.Root.AddItemList( fboOr );
첫번째Filter.AddItem( 첫번째 그리드 컬럼, foEqual , '찾을값', 필터내용을 화면에표시할내용 );
첫번째Filter.AddItem( 두번째 그리드 컬럼, foEqual , '찾을값', 필터내용을 화면에표시할내용 );
두번째Filter:= 그리드_증상tv.DataController.Filter.Root.AddItemList( fboOr );
두번째Filter.AddItem( 세번째 그리드 컬럼, foEqual , '찾을값', 필터내용을 화면에표시할내용 );
두번째Filter.AddItem( 네번째 그리드 컬럼, foEqual , '찾을값', 필터내용을 화면에표시할내용 );
그리드TV.DataController.Filter.Active := True;
그리드TV.DataController.Filter.EndUpdate;
type
포인트레코드 = ^레코드;
레코드 = record
Code : String;
name : String;
data : Integer;
end;
procedure TForm1.버튼넣기Click(Sender: TObject);
var
p : 포인트레코드;
I: Integer;
begin
cxCheckComboBox1.Properties.Items.Clear;
for I := 0 to 10 do
begin
New( p );
p^.Code := IntToStr(i);
p^.name := '김말동 - ' + IntToStr(i);
p^.data := i;
with cxCheckComboBox1.Properties.Items.Add do
begin
Description := p^.name;
Tag := Integer( p );
end;
end;
end;
procedure TForm1.버튼_찾기Click(Sender: TObject);
var
p : 포인트레코드;
I: Integer;
begin
ListBox1.Items.Clear;
for I := 0 to cxCheckComboBox1.Properties.Items.Count - 1 do
begin
if cxCheckComboBox1.States[i] = cbsChecked then
begin
p := Pointer( cxCheckComboBox1.Properties.Items[i].Tag );
ListBox1.Items.Add( P^.name );
end;
end;
end;
procedure TForm1.버튼_지우기Click(Sender: TObject);
var
p : 포인트레코드;
I: Integer;
begin
for I := 10 downto 0 do
begin
p := Pointer( cxCheckComboBox1.Properties.Items[i].Tag );
Dispose( p );
end;
cxCheckComboBox1.Properties.Items.Clear;
end;
'언어 > delphi' 카테고리의 다른 글
Package의 폼을 메인 폼으로 (0) | 2018.04.22 |
---|---|
TPaingBox Canvas to Bitmap (0) | 2018.03.30 |
ZXing.Delphi (Reading QRCode) (0) | 2018.03.30 |
Delphi QR Code Generator(zxing) (0) | 2018.03.28 |
계량관리 Eng (0) | 2017.01.25 |