怎样在TsGrid中实现,单击表头,使数据集按其排序

解决方案 »

  1.   

    这里有个过程供参考
    procedure Tform1.SortQuery(column:TColumn);
    var
      SqlStr,myFieldName,TempStr: string;
      OrderPos: integer;
      SavedParams: TParams;
    begin
      if not(Column.Field.FieldKind in [fklookup,fkdata]) then
        exit;
      if column.Field.FieldKind = fkdata then
        myFieldName := UpperCase(column.Field.FieldName)
      else
        myFieldName := UpperCase(column.Field.KeyFields);
      while Pos(myFieldName,'')<>0 do
        myFieldName := Copy(myFieldName,1,pos(myFieldName,'')-1) +
                       ','+Copy(myFieldName,Pos(myFieldName,'')+1,100);
      with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
      begin
        SqlStr := UpperCase(SQL.Text);
        if ParamCount > 0 then
        begin
          SavedParams := TParams.Create;
          SavedParams.Assign(Params);
        end;
        OrderPos := pos('ORDER',SqlStr);
        if (OrderPos = 0) or (pos(myFieldName,copy(SqlStr,OrderPos,100)) = 0) then
          TempStr := ' order by ' + myFieldName + ' Asc'
        else
          if pos('Asc',SqlStr) = 0 then
            TempStr := ' order by ' + myFieldName + ' Asc'
          else
            TempStr := ' order by ' + myFieldName + ' Desc';
        if OrderPos <> 0 then
          SqlStr := copy(SqlStr,1,OrderPos - 1);
        SqlStr := SqlStr + TempStr;
        Active := False;
        SQL.Clear;
        SQL.Text := SqlStr;
        if ParamCount > 0 then
        begin
          Params.AssignValues(SavedParams);
          SavedParams.Free;
        end;
        Prepare;
        Open;
      end;
    end;
      

  2.   

    我的 意思是,单击tsgrid的某一列,使tsgrid中的数据按其排序,不是DBGrid,数据是自己加进去的