お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"TClientDataSetを用いたソート"





TClientDataSetとTDBGridを用いて、昇順・降順の並び替えを行う。

nifty:FDELPHI/MES/7/22128 よりの転記です。

DBGridの項目箇所のクリックイベントから、下記の手続きを
呼んでください。
すでに降順の時は昇順に、また昇順の時は降順にします。

手続きの説明部分は、DScribe方式に準拠しています。

use節に、DBClient と DBGrids を追加してください。

 (**
 -------------------------------------------------------------------
 * @outline 指定のTClientDataSet.Columnでソートする
 * @author  雲松
 * @startdate 2001/02/16
 * @param Column TDBGridのTitleClickイベントでの引数を使用する。
 * 引数のColumnを基準に、TClientDataSetの内容を並べる。
 * 既にその項目の昇順で並んでいるときは降順に並べる。
 * 逆に、既に降順で並んでいるときは昇順で並べる。
 *
 * 注意すべき点は、TDBGrid.DataSetが、TClientDataSetであること。
 *
 *   1) TDBGridに、データがないとき、何もしない。
 *   2) 指定項目のフィールド名称取得
 *   3) 項目名称より、TClientDataSetの並び替え
 *
 * EX)
 *   var dbgrid1 : TDBGrid;
 *
 *  procedure TForm1.dbgrid1TitleClick(Column: TColumn);
 *  begin
 *    //これだけでTDBGridの内容を並び替えてしまう。
 *    CdsAddIndex(Column);
 *  end;
 *
 -------------------------------------------------------------------
 *)
procedure CdsAddIndex(Column: TColumn);
var
  st,ClFieldName : string;
begin
  //1) TDBGridに、データがないとき、何もしない。
  if Column.Grid.DataSource.DataSet = nil then exit;
  if Column.Grid.DataSource.DataSet.RecordCount = 0 then exit;

  //注意すべき点は、TDBGrid.DataSetが、TClientDataSetであること。
  if Column.Grid.DataSource.DataSet is TClientDataSet then
    begin
     //2) 指定項目のフィールド名称取得
     ClFieldName := Column.FieldName;

     //3) 項目名称より、TClientDataSetの並び替え
     with TClientDataSet(Column.Grid.DataSource.DataSet) do
       begin
         if IndexName = ClFieldName + '_IDX' then
           begin
             st := ClFieldName + '_DESC';
             AddIndex(st,ClFieldName,[ixDescending]);
           end
         else begin
           st := ClFieldName + '_IDX';
           AddIndex(st,ClFieldName,[]);
         end;
         IndexName := st;
       end;//with de end
    end; // Is TClientDataSet de End
end;

納豆酸辣湯鍋貼天麩羅牛肉麺
腰
果  雲松 VFD05050 
鶏  EmNifty 2.35
丁
香菜明太子蒟蒻小籠包宇治茶



 



Original document by 雲松            氏 ID:(VFD05050)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum