procedure TADODBTest.GridTitleClick(Column: TColumn); var DataSet: TDataSet; begin if not FMovingColumn then begin DataSet := Column.Field.DataSet; if DataSet is TCustomADODataSet then with TCustomADODataSet(DataSet) do begin if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then Sort := Column.Field.FieldName + ' DESC' else Sort := Column.Field.FieldName + ' ASC'; StatusMsg := 'Sorted on '+Sort; end; end; FMovingColumn := False; end;
procedure SortDBGridEh(Sender: TObject; ACol: Integer; Column: TColumnEh); var FieldName, SortStr: string; begin Screen.Cursor := crSQLWait; try if (Sender is TDBGridEh) and ((Sender as TDBGridEh).DataSource.DataSet <> nil) then begin if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then Exit;
if not (Sender as TDBGridEh).DataSource.DataSet.Active then Exit;
FieldName := Column.FieldName; if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then Exit;
if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind = fkData then SortStr := FieldName else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind = fkLookup then FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields else FieldName := '';
if (FieldName = '') or (Pos(';', FieldName) > 0) then Exit; case Column.Title.SortMarker of smNoneEh: begin Column.Title.SortMarker := smUpEh; TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := FieldName;
end; smUpEh: begin Column.Title.SortMarker := smDownEh; TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := FieldName + ' DESC'; end; smDownEh: begin Column.Title.SortMarker := smNoneEh; TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := ''; end; end; end; finally Screen.Cursor := crDefault; end; end;