Newsgroup: it.comp.lang.delphi
Titolo: bug tstringgrid?

Buona sera,
ho un piccolo problema con 2 tstringgrid...quando faccio doppio click su 
una riga della prima,vorrei copiare la riga interessata nella seconda 
tstringgrid....    sgtutti è la prima,sgselezionati è la seconda...
 
procedure TForm1.sgtuttiDblClick(Sender: TObject);
begin
sgselezionati.RowCount:=sgselezionati.RowCount+1;
sgselezionati.Cells[0,sgselezionati.RowCount]:=sgtutti.Cells[0,sgtutti.row];
sgselezionati.Cells[1,sgselezionati.RowCount]:=sgtutti.Cells[1,sgtutti.row];
sgselezionati.Cells[2,sgselezionati.RowCount]:=sgtutti.Cells[2,sgtutti.row];
end;
 
comportamenti strani...a volte copia le righe a volte no..a volte copia 
dati sbagliati...
 
sbaglio io o c'è qualcosa di strano nel mio codice?

On Saturday, 11 June 2016 19:19:20 UTC+1, MB339A  wrote:
 
[...]
Prima di sospettare che vi possa essere un bug nella TStringGrid, fatti un esame di coscienza :)
 
Stai inserendo sul RowCount. Devi inserire sul RowCount-1:
 
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var Col, Row, Last: Integer;
begin
  StringGrid2.RowCount := StringGrid2.RowCount + 1;
  Last := StringGrid2.RowCount-1;
  Row := StringGrid1.Row;
  for Col := 0 to StringGrid1.ColCount-1 do
  begin
    StringGrid2.Cells[Col, Last] := StringGrid1.Cells[Col, Row];
  end;
end;  


funziona...sì al 90%....mi spiego....(mea culpa sia chiaro!!! non posso 
far altro che ringraziarti!)
Con il tuo metodo, anche se la destinazione è vuota, mi trovo la prima 
riga della destinazione sempre "vuota" ed inizia a popolarsi dalla 
seconda riga...
Ho provato a mettere una condizione del tipo "se nella prima cella, 
prima colonna della destinazione non c'è blank, allora crea la riga con 
il rowcount+1" ma non ne vuol sapere...
 

scusami..intendevo l'ultima...non la prima

 il rowcount+1" ma non ne vuol sapere...
 
Non capisco cosa stai dicendo. Il mio codice funziona al 100%, non al 90%. Funziona, ovviamente, se hai almeno la riga header nella stringgrid dove copiare.
 

> Non capisco cosa stai dicendo. Il mio codice funziona al 100%, non al 90%. Funziona, ovviamente, se hai almeno la riga header nella stringgrid dove copiare.
 
yep!
thanks
 
 

Ciao,
  scusa se non quoto .... ma do per scontato che PRIMA di fare la procedura 
di copia delle righe tu  hai controllato quante righe hai nella tua 
stringgrid.
Devi controllare con RowCont perche' se hai rowcount = 5 (ovvero hai 6 righe 
1 di header + 5 a disposizione, l'arrary e' da 0..5) e tu stai copiando il 
6o elemento ..... semplicemente NON HAI SPAZIO.
Poi quando fai il doppioclick sulla prima stringgrid il cursore si sposta e 
hai il puntatore della rigna in Grid.Row
Quindi sarebbe il caso di
 
RigheCopiate : Integer;
 
 
procedure TForm1.sgtuttiDblClick(Sender: TObject);
begin
If sgselezionati.Cells[0,sgselezionati.RowCount-1]<>'' then 
sgselezionati.AddRow; // aggiungi una riga alla fine solo se l'ultima riga 
non e' vuota, controllo fatto sulla prima cella
sgselezionati.Cells[0,sgselezionati.RowCount-1]:=sgtutti.Cells[0,sgtutti.row]; 
// Aggiorni l'ultima riga
sgselezionati.Cells[1,sgselezionati.RowCount-1]:=sgtutti.Cells[1,sgtutti.row];
sgselezionati.Cells[2,sgselezionati.RowCount-1]:=sgtutti.Cells[2,sgtutti.row];
end;
 
dovrebbe andare
 
Ciao
 
Daniele
 

 stringgrid.
 
Guarda il mio codice: si incrementa il RowCount.