如题?

解决方案 »

  1.   

    先定义两个变量   
      private   
                FSort,FSortField:String;//控制grid排序     
        
        
      procedure   TFrmMain.DBGrid1TitleClick(Column:   TColumn);   
      var   
            iFieldCount:Integer;   
      begin   
          //if   not   DBGrid1.Active   then   exit;         //进行点击Title排序   
          for   iFieldCount   :=   0   to   DBGrid1.Columns.Count   -   1   do   
          begin   
                if   (Copy(DBGrid1.Columns[iFieldCount].Title.Caption,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-1,2)   =   '▼')   or   (Copy(DBGrid1.Columns[iFieldCount].Title.Caption,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-1,2)   =   '▲')   then   
                begin   
                      DBGrid1.Columns[iFieldCount].Title.Caption   :=   Copy(DBGrid1.Columns[iFieldCount].Title.Caption,1,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-3);   
                      break;   
                end;   
          end;   
          if   Column.FieldName   =   FSortField   then   
          begin   
                if   FSort   =   'DESC'   then   
                      FSort   :=   'ASC'   
                else   
                      FSort   :=   'DESC';   
          end   
          else   begin   
              FSortField   :=   Column.FieldName;   
              FSort   :=   'ASC';   
          end;   
          if   FSort   =   'ASC'   then   
                Column.Title.Caption   :=   Column.Title.Caption   +   '   ▲'   
          else   
                Column.Title.Caption   :=   Column.Title.Caption   +   '   ▼';   
          QryAdd.Sort:=   Column.FieldName   +   '   '   +   FSort;   
      end;
      

  2.   


    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var
      s:string;
    begin
      if ADOQuery1.Active = True then
       begin
          if DBGrid1.Tag =0 then
           begin
             ADOQuery1.Sort:=Column.FieldName+' ASC';
             s:= Trim(Column.Title.Caption);
             if (Pos('▽',s)>0) or (Pos('△',s)>0) then
               s:=Copy(s,1,Length(s)-2);
             Column.Title.Caption := Format('%s △', [Trim(s)]);
             Column.Font.Color := clBlack;
             DBGrid1.Tag:=1;
           end
          else
           begin
             ADOQuery1.Sort:=column.FieldName+' DESC';
             s:= Trim(Column.Title.Caption);
             if (Pos('▽',s)>0) or (Pos('△',s)>0) then
               s:=Copy(s,1,Length(s)-2);
             Column.Title.Caption := Format('%s ▽', [Trim(s)]);
             Column.Font.Color := clGreen;
             DBGrid1.Tag:=0;
           end;
       end;
    end;
      

  3.   

    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var i : integer;
    begin
      for i:= 1 to DBGrid1.Columns.Count do
      begin
    //恢复所有标题字体为默认
        DBGrid1.Columns[i-1].Title.Font.Color := clWindowText;
        DBGrid1.Columns[i-1].Title.Font.Style := [];
      end;
      if ADOQuery1.Sort<>(Column.FieldName+' ASC') then      //判断原排序方式
      begin
        ADOQuery1.Sort := Column.FieldName+' ASC';
        Column.Title.Font.Color := clRed;          //改变标题行字体为红色,表示当前的排序方式为升序
        Column.Title.Font.Style := [fsBold];
      end
      else begin
        ADOQuery1.Sort := Column.FieldName+' DESC';
        Column.Title.Font.Color := clBlue;         //改变标题行字体为红色,表示当前的排序方式为降序
        Column.Title.Font.Style := [fsBold];
      end;
    end;