Inoltre un consiglio, quando cancellate le cose partite sempre dall'ultimo elemento e poi tornate indietro. Qualcosa simile a
i:= Grid_Incassi.RowCount-1;
while i>=0 do
begin
Grid_Incassi.Rows.Delete(i);
Dec(i);
end;
Altrimenti quando cancelli l'id 0, id 1 diventa l'id 0 e tu con il ciclo cancelli l'id 1 mangiandoti una voce dalla cancellazione e così via.
Il ciclo for va benissimo.Se si sta alterando il numero di elementi di un contenitore (lista o collezione) è bene ricordarsi che il numero di elementi viene alterato.Il ciclo for determina prima di iniziare il numero di passi da eseguire.Se si deve svuotare un contenitore è bene usare il metodo di pulizia (se presente), altrimenti il ciclo a ritroso (downto) è la strada per eviare casini con gli indici ;)0 resta 0 anche se dentro il ciclo viene eliminato un elemento del contenitore. Quindi tutti gli indici usati sono validi e il ciclo esce senza problemi.
Si può utilizzare anche un enumeratore per l'eliminazione ... ;)
for elemento in contenitore docontenitore.delete(contenitore.indexOf(elemento));
Ma questo approccio prevede che vengano eseguiti 2 loop, in linea di principio. Quello di eliminazione e quello per ricavare l'indice.Stilgar
in effetti se presente il metodo di pulizia (di solito Clear), andrebbe usato quello
per completare la panoramica sui possibili loop per le eliminazioni (se si elimina sempre il primo elemento, non serve usare l'indice ;) ):
while contenitore.RowCount > 0 do
contenitore.delete(0);
Edit:
se si vuole usare il for:
for i:=0 to contenitore.RowCount-1 do
contenitore.delete(0);
if Grid_Incassi.RowCount > 1 then;
for i := 1 to Grid_Incassi.RowCount do
Grid_Incassi.Rows.Delete(i);
Grid_Incassi.Rows.Delete(0);
in alternativa
if Grid_Incassi.RowCount > 1 then;
for i := Grid_Incassi.RowCount-1 downto 1 do
Grid_Incassi.Rows.Delete(i);
Poiché la mia TStringGrid si chiama Grid_Incassi, qual è la sintassi corretta per fare il Delete di una data riga su quella grid?
Dipende:
- se devi cancellare una singola riga fai Grid_Incassi.DeleteRow(Idx);
- se invece devi cancellare tutte le righe che soddisfano determinate caratteristiche, devi leggere la tabella al contrario, altrimenti l'indice potrebbe sforare il n° di righe. Cos' facendo, puoi cancellare le righe che vuoi. Qui un esempio fatto al volo:
for Idx:=Grid_Incassi.RowCount - 1 downto Grid_Incassi.FixedRows do begin
if (quello che vuoi tu) then begin
Grid_Incassi.DeleteRow(Idx);
end;
end;