کد زیر عمل مرتب سازی بر روی کلاینت دیتاست را انجام میدهد . ( نظر یادتون نشه )
procedure SortClientDataset(Column: TDBGridColumnItem;grid:tdbadvgrid;ClientDataSet:TClientDataSet);
var
andstr:string;
i:integer;
begin
try
andstr:='';
if (trim(Column.FieldName ) ='') then exit;
if (grid.DataSource.DataSet.FieldByName(Column.FieldName ).FieldKind<>fkData ) then exit;
if (grid.DataSource.DataSet.ClassNameIs ('TClientDataSet')=true) then
begin
if ClientDataSet.IndexName='' then
andstr:=''
else
andstr:=';';
ClientDataSet.AddIndex(Column.FieldName,Column.FieldName,[ixCaseInsensitive]);
ClientDataSet.AddIndex(Column.FieldName+' DESC',Column.FieldName,[ixCaseInsensitive,ixDescending]);
//مرتب سازی به صورت صعودی
if KeyDataToShiftState(1)=[] then
begin
for i:=0 to grid.Columns.Count -1 do
grid.Columns[i].HeaderFont .Color:=clWhite;
Column.HeaderFont .Color:=clyellow;
ClientDataSet.IndexName:=Column.FieldName
end;
//مرتب سازی نزولی
if KeyDataToShiftState(1)=[ssshift] then
begin
for i:=0 to grid.Columns.Count-1 do
grid.Columns[i].headerFont.Color:=clWhite;
Column.HeaderFont .Color:=$001D9DE2;
ClientDataSet.IndexName:= Column .FieldName+ ' DESC';
end;
//مرتب سازی چند ستون به صورت صعودی
if KeyDataToShiftState(1)=[ssctrl] then
begin
ClientDataSet.IndexFieldNames :=ClientDataSet.IndexName+andstr+Column.FieldName;
Column.HeaderFont .Color:=clyellow;
end;
ClientDataSet.First;
end;
except on e:exception do
ShowMessage (e.Message );
end;
end;