Ehlib,Dbgrideh ,zeoslib 排序 ,支持3其所有数据集

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

ContractedBlock.gif ExpandedBlockStart.gif Code
//**************************************
//
// 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 <> nilthen
    
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) > 0then
        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.

 

转载于:https://www.cnblogs.com/apple1/archive/2009/10/27/1590410.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值