原先版本只支持了 TZQuery ,用本地排序是不行的(默认没有支持zeoslib),所以只能按以下方法


//**************************************
//
// Ehlib 的 dbgrideh 里面排序的函数
// 是对网上的 Ado 版本 的修改
// 适用数据集 zeoslib 6.1 zquery
// delphi 7 ,windows xp
// 绵阳市卓易软件公司
//
//*********************
unit EhlibSortZeoslib;
interface
uses Controls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, GridsEh,
DBGridEh, forms, ZStoredProcedure;
procedure SortDBGridEh(Sender: TObject; ACol: Integer;
Column: TColumnEh);
implementation
//由于ehlib不支持中文字段名,所以过滤掉
function IsChString(Str: string): Boolean;
var
i: Integer;
begin
Result := False;
for i := 1 to Length(Str) do
begin
if Ord(Str[i]) > $7F then {if Ord(Str[i]) > 127 then}
begin
Result := True;
Break;
end;
end;
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
//支持 tzquery, tzreadonlyquery,tzstoredproc 3种数据集
if not (((Sender as TDBGridEh).DataSource.DataSet is TZQuery)
or ((Sender as TDBGridEh).DataSource.DataSet is TZReadonlyQuery)
or ((Sender as TDBGridEh).DataSource.DataSet is TZStoredProc)) 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;
if IsChString(fieldName) then exit;//不支持的中文字段不排序
case Column.Title.SortMarker of
smNoneEh:
begin
//Column.Title.SortMarker := smUpEh;
TZQuery((Sender as TDBGridEh).DataSource.DataSet).SortedFields :=
FieldName;
TZQuery((Sender as TDBGridEh).DataSource.DataSet).SortType := stDescending;
end;
smUpEh:
begin
//Column.Title.SortMarker := smDownEh;
TZQuery((Sender as TDBGridEh).DataSource.DataSet).SortedFields :=
FieldName;
TZQuery((Sender as TDBGridEh).DataSource.DataSet).SortType := stAscending;
end;
smDownEh:
begin
//Column.Title.SortMarker := smUpEh;
TZQuery((Sender as TDBGridEh).DataSource.DataSet).SortedFields :=
FieldName;
TZQuery((Sender as TDBGridEh).DataSource.DataSet).SortType := stDescending;
end;
end;
end;
finally
Screen.Cursor := crDefault;
end;
end;
end.