データセットをソートする (ADO)
Delphiの ADO Express を使って、グリッド上に表示しているデータセットを実行時に (Requeryせずに) ソートする方法です。
以下のようにコンポーネントを配置し、DBGridに ADOQueryの内容を表示します。DBGrid のカラムをクリックされたらその列でソートするようにします。ソートには TCustomADODataSet の、Sort メソッドじゃなくて Sort プロパティを使います。 このプロパティにフィールド名を渡すとその列でソートされます。フィールド名の後ろに DESC をつけると降順にソートされます。
以下のコードでは、グリッドのカラムをクリックするとその列でソートし、同じ列をもう一度クリックしたら今度は降順でソートします。
■ ソートの例 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; procedure FormCreate(Sender: TObject); procedure DBGrid1TitleClick(Column: TColumn); private { Private 宣言 } FOldField: string; // <-- ソート制御用の変数 FSortAsc: boolean; // <-- ソート制御用の変数 public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FOldField := ''; FSortAsc := True; end; procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin if (FOldField = Column.FieldName) then begin //前回と同じ列をクリックされた場合は昇順降順を切り替える FSortAsc := not FSortAsc; end else begin FOldField := Column.FieldName; FSortAsc := True; end; if (FSortAsc) then begin //昇順ソート ADOQuery1.Sort := FOldField; end else begin //降順ソート ADOQuery1.Sort := FOldField + ' DESC'; end; end; end. |