Search code examples
delphidelphi-xe3

How to delete selected records from TDBAdvGrid?


I want to delete multiple selected records which I have displayed at TDBAdvGrid. A number of records are being selected by checking checkbox in front of them. After clicking on Delete button it triggers procedure as follows. It is returning values of selected rows id successfully only problem with deletion of all records. It deletes only first selected record.

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;

It is deleting only first record in lineup. After deleting first record it breaks for loop and control goes back to TDBAdvGrid with updated data after delete.

enter image description here


Solution

  • Final code based on suggestion is as follows

      j := 0;
      DBAdvGrid1.BeginUpdate;
      for i := 1 to DBAdvGrid1.RowCount - 1 do
      begin
        showmessage('inside rowcount loop');
        if DBAdvGrid1.GetCheckBoxState(1,i,state) then
        begin
          if state then
          begin
             DBAdvGrid1.DataSource.DataSet.First;
             DBAdvGrid1.DataSource.DataSet.MoveBy(i - 1 - j);
             DBAdvGrid1.DataSource.DataSet.Delete;
             j := j+1;
             continue;
          end;
        end;
      end;
    

    This code works perfectly only when PageMode := False