DBGridは表形式で簡単にデータが表示できるため利用することが多いかと思います。
今回はこのDBGridで現在選択している行をコピーして、新しい行を作成する方法をご紹介しましょう。
DBGridでは表示しているレコードやその値を変更する場合、
表示しているデータセット(TFDMemTableなど)側に対して変更を行います。
このため、行コピーするのであれば、コピー元になる行の値をセーブし、行挿入後その値をセットします。
そのとき下記のように項目値のセーブにはVariant型の配列を利用します。
procedure TForm1.Button1Click(Sender: TObject);
var
FldArry : Variant;
i : Integer;
begin
// 配列を作成してレコード値をコピー
FldArry := VarArrayCreate
([0,
DBGrid1.DataSource.DataSet.FieldCount - 1],
VarVariant);
for i := 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
begin
FldArry[i] := DBGrid1.DataSource.DataSet.Fields[i].Value;
end;
// レコード挿入
DBGrid1.DataSource.DataSet.Append;
// 配列データセット
for i := 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
begin
DBGrid1.DataSource.DataSet.Fields[i].Value := FldArry[i];
end;
end;
この例ではすべてのフィールドについて行っていますが、
キーフィールドなど特定の項目を除くのであれば、
配列やフィールドの添え字を変更する等のロジック修正が必要です。