DBGrid单击标题自动排序 2008-09-04 17:10

字号:    

DBGrid单击标题自动排序收藏

新一篇: 脚本实现CheckBox父选中,子全选中,子选中父也选中! | 旧一篇: 利用API下载文件,HTTP

procedure TForm1.DBGrid1TitleClick(Column: TColumn);

var

 s,cFieldName:string;

 i:integer;

 DataSet:TDataSet;

begin

 Try DataSet:=Column.Grid.DataSource.DataSet;

 if not DataSet.Active then exit;

 if Column.Field.FieldKind=fkLookup then

  cFieldName:=Column.Field.KeyFields

 else

  if Column.Field.FieldKind=fkCalculated then

   cFieldName:=Column.Field.KeyFields

  else

   cFieldName:=Column.FieldName;

 if DataSet is TCustomADODataSet then

 begin

  s:=TCustomADODataSet(DataSet).Sort;

  if s='' then

  begin

   s:=cFieldName;

  end else

  begin

   if Pos(cFieldName,s)<>0 then

   begin

    i:=Pos('DESC',s);

    if i<=0 then

    begin

     s:=s+' DESC';

    end else

    begin

     Delete(s,i,4);

    end;

   end else

   begin

    s:=cFieldName;

   end;

  end;

  TCustomADODataSet(DataSet).Sort:=s;

 end else

  if DataSet is TClientDataSet then

  begin

   if TClientDataSet(DataSet).indexfieldnames<>'' then

   begin

    i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName);

    if i=-1 then

    begin

     with TClientDataSet(DataSet).IndexDefs.AddIndexDef do

     begin

      Name:='i'+Column.FieldName;

      Fields:=Column.FieldName;

      DescFields:=Column.FieldName;

     end;

    end;

    TClientDataSet(DataSet).IndexFieldNames:='';

    TClientDataSet(DataSet).IndexName:='i'+Column.FieldName;

   end else

   begin

    TClientDataSet(DataSet).IndexName:='';

    TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;

   end;

  end;

 Except

 End;

end;

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009