For i:=1 to 31 do
Begin
StringGrid.cells[0,1]:=IntToString(i);
End;
Du schreibst alle Werte der Reihe nach in die gleiche Zelle 0, 1 statt 0, i. (Es sei denn das ist nur ein Tippfehler im Forum, weil du den Code vermutlich nicht 1:1 kopiert hast, denn die Funktion heißt IntToStr nicht IntToString.)