比如点击A列标题,则按A列排序,点击B列则按B列排序,请问在delphi中如何实现,麻烦您给出代码:)

解决方案 »

  1. procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    begin
    with adoquery do begin
     sql.clear;
     sql.add('select * from table order by'+column.fieldname);
     open;
    end;
    end;
      

  2. bSort是一个全局变量,要求ado
    代码:
    procedure TForm.DBGrid1TitleClick(Column: TColumnEh);
    var
        i: integer;
        fieldname: string;
    begin
       //排序
       i := Column.Index;
       if bSort then
       begin
          fieldname := DBGrid1.Columns[i].FieldName + ' ASC';
          bSort := False;
       end
       else
       begin
          fieldname := DBGrid1.Columns[i].FieldName + ' DESC';
          bSort := True;
       end;
        DM.PhysicInfoADOQuery.sort := fieldname;
    end;
      

  3. TitleClick事件
    var
      DataSet: TDataSet;
    begin
      {点击标题栏,排序}     //▼ ▲
      if not ADOQExecl.Active then exit;  DataSet := Column.Field.DataSet;
      
      if DataSet is TCustomADODataSet then
      with TCustomADODataSet(DataSet) do
      begin
        if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
           begin
             Sort := Column.Field.FieldName + ' DESC';
           end
        else
           begin
             Sort := Column.Field.FieldName + ' ASC';
           end;
      end;
      

  4. if not ADOQExecl.Active then exit;改成 if not DataSet.Active then exit;表示如果没有数据则退出此事件
      

  5. procedure TDocMainform.DBGDocTitleClick(Column: TColumn);
    var
      SortType: string;
    begin
      if Column.Index <> 0 then
      begin
        if SortType = ' ASC' then
          SortType := ' DESC'
        else
          SortType := ' ASC';      DATASET1.Sort := Column.FieldName + SortType
      end;end;
      

类似问题 »