想在STRINGGRID里想ACCESS那样可以任意排序!!!请指教!!!

解决方案 »

  1.   

    (*//
    标题:字符网格排序
    说明:升序、降序;示例点击标题排序
    设计:Zswang
    日期:2002-04-27
    支持:[email protected]
    //*)///////Begin Source
    function StringGridRowSwap(mStringGrid: TStringGrid;
      mFromRow, mToRow: Integer): Boolean;
    var
      S: string;
    begin
      Result := False;
      if (mToRow = mFromRow) then Exit;
      if not Assigned(mStringGrid) then Exit;
      if (mFromRow < 0) or (mFromRow >= mStringGrid.RowCount) then Exit;
      if (mToRow < 0) or (mToRow >= mStringGrid.RowCount) then Exit;
      try
        S := mStringGrid.Rows[mFromRow].Text;
        mStringGrid.Rows[mFromRow].Text := mStringGrid.Rows[mToRow].Text;
        mStringGrid.Rows[mToRow].Text := S;
      except
        Exit;
      end;
      Result := True;
    end; { StringGridRowSwap }function StringGridRowSort(mStringGrid: TStringGrid;
      mColIndex: Integer; mDesc: Boolean = False): Boolean;
    var
      I, J: Integer;
    begin
      Result := False;
      if not Assigned(mStringGrid) then Exit;
      if (mColIndex < 0) or (mColIndex >= mStringGrid.ColCount) then Exit;
      for I := mStringGrid.FixedRows to mStringGrid.RowCount - 2 do
        for J := I + 1 to mStringGrid.RowCount - 1 do
          if mDesc then
            if mStringGrid.Cells[mColIndex, I] < mStringGrid.Cells[mColIndex, J] then
              StringGridRowSwap(mStringGrid, I, J)
            else
          else if mStringGrid.Cells[mColIndex, I] > mStringGrid.Cells[mColIndex, J] then
            StringGridRowSwap(mStringGrid, I, J);
      Result := True;
    end; { StringGridRowSort }
    ///////End Source///////Begin Demo
    procedure TForm1.StringGrid1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    {$J+}
    const
      vOldCol: Integer = -1;
    {$J-}
    var
      vCol, vRow: Integer;
    begin
      if Button = mbRight then Exit;
      TStringGrid(Sender).MouseToCell(X, Y, vCol, vRow);
      if (vRow < 0) or (vRow >= TStringGrid(Sender).FixedRows) then Exit;
      StringGridRowSort(TStringGrid(Sender), vCol, vOldCol = vCol);
      if vOldCol = vCol then
        vOldCol := - vOldCol
      else vOldCol := vCol;
    end;
    ///////End Demo
      

  2.   

    你是从什么地方把数据写到STRINGGRID里面的,如果是数据集,就在数据集里排就行了