これは別ブログに書いた "Delphi Advent Calendar 2018" の 23 日目の記事を一部書き直して、Qiitaに再投稿したものです。
はじめに
伝票などの明細一覧で、行番号の表示は、行の追加や削除を考えるとちょっと面倒なところです。
ちょっと手抜きできないかと考えた方法を纏めたものです。
実装方法
データセットのRecNoプロパティの利用しています。
とりあえず簡略化して、下記のような画面の明細画面とします。
テーブルのフィールドは、
行番号: TIntegerField;
品名: TWideStringField;
数量: TIntegerField;
金額: TIntegerField;
です。データセット名は、FDMemTable1とします。
行番号フィールドのGetTextイベントに下記を追加します。
Text := FDMemTable1.RecNo.ToString;
削除については、2行目削除すると下記のように、データセットの内容を操作せずリナンバーされます。
追加時は、
となり、行番号が-1となります。データセットに対して、Postをすれば下記のように行番号が設定されます。
実際に、データベースに登録する際は、当然行番号の振り直しは必要になります。
注意点は、RecNoプロパティは、データセットのデータに対し紐づけされているわけではないということです。
ソートや、フィルタをかけると、行番号が変わります。表示されてる行番号が、RecNoの値になっているようです。
RecNoプロパティは、他にも、Bookmark代わりに使えたりしています。
おわりに
今回は、TFDMemTableで記述しましたが、RecNoプロパティは、TDataSetからあるので他のデータセットでも使えると思いますが、動きが確認できていないので、とりあえず、TFDMemTableとしています。
また今回の上記画面は、Delphi 10.2で動かしています。