Не удаляет все нужные строки из TStringGrid Delphi11
Работает но удаляет не все что нужно. Необходимо удалить записи старше 2х лет. Дата указана в MaskEdit. Процедура удаления:
var i,j:integer;
begin
with SG do
begin
if ARow=RowCount-1 then
RowCount:=RowCount-1
else begin
for i := ARow+1 to RowCount-1 do
for j := 0 to ColCOunt-1 do
Cells[j,i-1]:=Cells[j,i];
RowCount:=RowCount-1;
end;
end;
end;
Проверка условия:
procedure TForm2.N21Click(Sender: TObject);
//удалить записи старше 2-х лет
var x:string;
ARow,n,The_J:integer;
begin
The_J:=1;
n:=Stringgrid1.RowCount;
while The_J<n do
begin
n:=Stringgrid1.RowCount;
x:=copy(Stringgrid1.Cells[4,The_J],7,2);
if strtoint(x)<21 then
begin
DeleteRow(Stringgrid1,The_J);
end;
The_J:=The_J+1;
end;
end;
До выполнения:
После:
Еще раз после:

Ответы (1 шт):
Автор решения: Владимир Клыков
→ Ссылка
//количество строк меняется во время выполнения цикла, нельзя снять значение до начала и использовать, нужно проверять текущее значение а не значение на момент старта
while The_J<Stringgrid1.RowCount do
....
if strtoint(x)<21 then
DeleteRow(Stringgrid1,The_J);
else
The_J:=The_J+1; // смещать курсор нужно только если не было сдвига элементов удалением.