안녕하세요... 델 초본데요...
그리드 상에서 컬럼 소트를 지원하는 컴포넌트가 있나요?
예를들어, 주민번호, 이름, 나이, 성별, 등의 컬럼이 있고, 그리드에 해당되는 사람들의 데이타가 있을때 나이 컬럼을 누르면 나이로 소트가 되는거 말입니다.
그리드에서 지원하지 않으면 매번 DB에서 order by 해와서 다시 뿌려주고 하는 작업이 만만치 않아서요.
많은 고수님들 답변 기다리겠습니다.
연일 뿌리던 비가 잠잠해질려나봅니다.
다들 무탈하시길 빌고, 평안하세요~^^*
DBGrid에서 타이틀을 클릭시 Sort하도록 만들었던 겁니다.
참조하시기 바랍니다.
procedure Tfrm.DBGridListTitleClick(Column: TColumn);
begin
SortGrid(Column);
end;
procedure SortGrid(Column: TColumn);
var
slSQL : String;
ilPos,i : integer;
p_Qry : TQuery;
begin
p_Qry:=TQuery(TDBGrid(Column.Grid).DataSource.Dataset);
if not p_Qry.Active then Exit;
if Column.Field.Calculated then Exit;
for i:=0 to TDBGrid(Column.Grid).Columns.count-1 do
begin
if TDBGrid(Column.Grid).Columns[i]<>Column then
begin
if Pos('▲',TDBGrid(Column.Grid).Columns[i].Title.Caption)>0 then
TDBGrid(Column.Grid).Columns[i].Title.Caption:=
Copy(TDBGrid(Column.Grid).Columns[i].Title.Caption,
1,Pos('▲',TDBGrid(Column.Grid).Columns[i].Title.Caption)-1);
if Pos('▼',TDBGrid(Column.Grid).Columns[i].Title.Caption)>0 then
TDBGrid(Column.Grid).Columns[i].Title.Caption:=
Copy(TDBGrid(Column.Grid).Columns[i].Title.Caption,
1,Pos('▼',TDBGrid(Column.Grid).Columns[i].Title.Caption)-1);
end; //if
end;//for
slSQL := UpperCase(p_qry.SQL.Text);
ilPos := Pos('ORDER BY',slSQL);
if ilPos > 0 then
slSQL := copy(slSQL,1,ilPos+Length('ORDER BY'))
else slSQL := slSQL+ ' ORDER BY';
if Column.Field.LookUp then
slSQL := slSQL +' '+Column.Field.KeyFields
else slSQL := slSQL +' '+Column.Field.Fieldname;
if Pos('▼',Column.Title.Caption)>0 then
begin
slSQL := slSQL+ ' DESC ';
Column.Title.Caption:=Copy(Column.Title.Caption,1,Pos('▼',Column.Title.Caption)-1);
Column.Title.Caption:=Concat(Column.Title.Caption,'▲');
end
else if Pos('▲',Column.Title.Caption)>0 then
begin
Column.Title.Caption:=Copy(Column.Title.Caption,1,Pos('▲',Column.Title.Caption)-1);
Column.Title.Caption:=Concat(Column.Title.Caption,'▼');
end
else
begin
Column.Title.Caption:=Concat(Column.Title.Caption,'▼');
end;
p_qry.Close;
p_qry.SQL.Text := slSQL;
if p_Qry.Owner is TFrmTzzUpdate then
p_qry.Open;
end;