0

TDBAdvGrid で表示した複数の選択レコードを削除したい。それらの前のチェックボックスをチェックすることにより、多数のレコードが選択されています。[削除] ボタンをクリックすると、次の手順がトリガーされます。選択した行 ID の値を正常に返しているのは、すべてのレコードの削除に関する問題のみです。最初に選択したレコードのみを削除します。

procedure TForm5.Button3Click(Sender: TObject);
var
     i,j,idn: Integer;
     State: Boolean;
begin
  j := 0;
  for i := 1 to DBAdvGrid1.RowCount - 1 do
  begin
    if DBAdvGrid1.GetCheckBoxState(1,i,state) then
    begin
      if state then
      begin
        idn := StrToInt(DBAdvGrid1.Cells[6,i]);
        UniQuery1.SQL.Text := 'Delete from userplays where id = :id';
        UniQuery1.ParamByName('id').AsInteger := idn;
        UniQuery1.ExecSQL;


      end;
    end;
  end;

end;

ラインナップの最初のレコードのみを削除しています。最初のレコードを削除すると、for ループが中断され、削除後に制御が更新されたデータで TDBAdvGrid に戻ります。

ここに画像の説明を入力

4

3 に答える 3

0

仮想テーブルを使用して、OnCheck イベントで cyBookmarks を使用できます。選択したすべてのレコードのリストを作成し、cyBookmarks.bookmarklits.count でリストできるので、私の例は次のようになります。

procedure TForm2.cyDBGrid1CheckBoxClick(Sender: TObject); 
begin 
    if cyBookmarks1.AddCurrentRecord then 
        begin 
            cyBookmarks1.BookmarkList.InsertBookmark(cyDBGrid1.CheckedList.CurrentRecord); 
            cyDBGrid1.Invalidate ; 
        end 
    else 
        begin 
            cyBookmarks1.RemoveCurrentRecord; 
            cyDBGrid1.Invalidate; 
        end; 
    if cyBookmarks1.BookmarkList.Count>0 then 
        begin 
            VirtualTable1.GotoBookmark(cyBookmarks1.BookmarkList.Items[0]); 
            lbl1.Caption:=VirtualTable1.FieldByName('N_ENREGISTREMENT').AsString; 
        end; 
end;
于 2015-12-10T12:44:44.827 に答える