【DO!BOOK・ページリンク】
2008_migaro_techreport_001   116 / 136

BOOKをみる

10秒後にBOOKのページに移動します


114 ソース3 DBGrid上でのクリックによるソート機能例 //OnTitleClick イベント procedure Tfrm1.DBGrid1TitleClick(Column: TColumn); var sFieldNM :String; // 退避フィールド名 begin with DBGrid1 do begin // 明細非表示時は処理無効 if DataSource.DataSet.Active = False then Exit; // カラムのフィールド名を退避 sFieldNM := Column.FieldName; with (DataSource.DataSet as TClientDataSet) do begin // インデックスフィールド作成 if IndexDefs.Count = 0 then IndexDefs.Add('aIndex', '', []); // 明細の表題/並び替えの制御 if AnsiPos(' ▲ ', Column.Title.Caption) <> 0 then begin // ----- 降順へ ----- // 表題設定 Column.Title.Caption := StringReplace(Column.Title.Caption, ' ▲ ', '', [rfReplaceAll]); Column.Title.Caption := Column.Title.Caption + ' ▼ '; // 降順フィールドの設定 if IndexDefs[0].DescFields = '' then IndexDefs[0].DescFields := sFieldNM else IndexDefs[0].DescFields := IndexDefs[0].DescFields + ';' + sFieldNM; // インデックスフィールドのオプション初期化 IndexDefs[0].Options := []; end else if AnsiPos(' ▼ ', Column.Title.Caption) <> 0 then begin // ----- 設定解除 ----- // 表題設定 Column.Title.Caption := StringReplace(Column.Title.Caption, ' ▼ ', '', [rfReplaceAll]); // 並び順の設定解除(降順フィールド) if AnsiPos(sFieldNM + ';', IndexDefs[0].DescFields) <> 0 then sFieldNM := sFieldNM + ';' else if AnsiPos(';' + sFieldNM, IndexDefs[0].DescFields) <> 0 then sFieldNM := ';' + sFieldNM; IndexDefs[0].DescFields := StringReplace(IndexDefs[0].DescFields, sFieldNM, '', [rfReplaceAll]); // カラムのフィールド名を再取得 sFieldNM := Column.FieldName; // 並び順の設定解除(昇順フィールド)