سلام من با استفاده از AdoTable.sort اطلاعات را به صورت نزولی و صعودی مرتب کردم و دست آخر با فرمان locate میخواهم به همان سطری برود که قبل از مرتب سازی انتخاب شده بوده.
شکل کلی دستورات :

procedure TForm5.wwDBGrid1TitleButtonClick(Sender: TObject;
AFieldName: String);
var Nu: integer;
begin
Application.ProcessMessages;
nu := form1.ADOTable2.fieldbyname('IdEmployees').AsInteg er;
Memo1.Lines.Add(inttostr(Nu));
if (AFieldName <> 'RecNu')and(OnMoveColu = false) then
if (form1.ADOTable2.Sort <> '')and (Copy(form1.ADOTable2.Sort,length(form1.ADOTable2. Sort)-2,3)='ASC') then
form1.ADOTable2.Sort := AFieldName + ' DESC' else
form1.ADOTable2.Sort := AFieldName + ' ASC'
else OnMoveColu := false;
form1.ADOTable2.Locate('IdEmployees',nu,[]);
end;

ولی فرمانlocate برای بار اول درست عمل میکنه ولی وقتی کاربر دوبار سطر wwdbgrid را کلیک میکنه بار دوم locate به سطر قبل از مرتب سازی می رود.

2- نظر خودتون را در باره Sort برنامه ام بگید.
3- من از فرمان locate در برنامه ام خیلی استفاه کردم آیا قابل اطمینان است. چون در فرمان بالا حتی وقتی درستی پیدا کردن سطر مرد نظر را ازش میخوام true جواب میده ولی به سطر اشتباهی میره.