DBGrid 는 ordering(sorting) 기능이 없다.
DataSet(TFDQuery) 는 쿼리한 결과를 모두 가지고 있지 않다.
즉, 메모리에 모두 담고있지 않기 때문에 쿼리를 다시 해야 한다.
이는 DataSet(TFDQuery).RecordCount 함수를 실행했을때 실제 쿼리결과의 row count 와 틀린 원인과 동일하다.
// DBGrid 타이틀 클릭 procedure TfrmMain.DBGExamTitleClick(Column: TColumn); begin DoSortGrid(Column); end; // 쿼리 order by procedure TfrmMain.DoSortGrid(Column: TColumn); var sSQL : String; iPos,i : Integer; pQry : TFDQuery; //FireDAC 로 구성되었을 경우. // pQry : TQuery; //BDE 로 구성되었을 경우 begin pQry:=TFDQuery(TDBGrid(Column.Grid).DataSource.DataSet); if (not pQry.Active) or (pQry.IsEmpty) then Exit; if pQry.UpdateStatus in [usInserted,usModified] 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 sSQL := UpperCase(pQry.SQL.Text); iPos := Pos('ORDER BY',sSQL); if iPos > 0 then sSQL := Copy(sSQL,1,iPos+Length('ORDER BY')) else sSQL := sSQL+ ' ORDER BY'; if Column.Field.LookUp then sSQL := sSQL +' '+Column.Field.KeyFields else sSQL := sSQL +' '+Column.Field.Fieldname; if Pos('▼',Column.Title.Caption)>0 then begin sSQL := sSQL+ ' 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; pQry.Close; pQry.SQL.Text := sSQL; pQry.Open; end;
'Development > Delphi' 카테고리의 다른 글
DateUtils.pas 날짜함수 (0) | 2015.08.13 |
---|---|
자식컨트롤 특정 클래스타입 찾기 (0) | 2015.07.17 |
StringGrid의 Column의 크기(width) 자동 조절 (0) | 2015.07.15 |
TDataSet(TQuery, TTable) 엑셀로 저장하기 (0) | 2015.07.09 |
TDataSet 바인딩된 SQL Field / Value 출력하기 (0) | 2015.07.08 |