DBGridで複数行選択されたレコードを調べる
TDBGridの Optionsには複数行選択のためのオプション dgMultiSelectがあり、 ユーザーが複数行を選択できます。
では、コード上でその複数選択された行を調べるにはどうしたらいいのでしょうか? DBGridの SelectedRowsプロパティを使用します。ただちょっと面倒です。
以下の例は DBGrid1で選択されているレコードのあるフィールドを ListBox1へ出力します。
| ■ 複数選択された行を調べる例 |
procedure TForm1.Button1Click(Sender: TObject);
var
ix : integer;
begin
if DBGrid1.SelectedRows.Count > 0 then begin
for ix := 0 to DBGrid1.SelectedRows.Count - 1 do begin
//カレント行を移動
Query1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[ix]));
ListBox1.Items.Add(Query1.FieldByName('FIELDNAME').AsString);
end;
end;
end;
|
ただし、グリッド上の選択行が1行の場合、SelectedRows.Count がゼロを返す場合があります。その場合は以下のようにします。
| ■ カレント行を選択状態にする |
if (DBGrid1.SelectedRows.Count = 0) then begin
DBGrid1.SelectedRows.CurrentRowSelected := True;
end;
for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin
Query1.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
|