I think you have a error on logic.
that is
datagridview1.Rows.RemoveAt(p)
delete the row of index p .after deleting the row whole index of grid is refreshed.
suppose you have
index 0 = row 1
index 1= row 2
index 2=row 3
-----------------
----------------- and so on
In your loop (when p=0 )
row1 (with index 0) is deleted index is refresed.
i.e. grid become as
index 0 = row 2
index 1= row 3
-----------------
-----------------
on 2nd loop(when p=1)
row 3 is deleted. with current index(1) ... so your loop deletes only odd rows.
To solve u should always remove row at index 0 inside loop.
you can proceed as
Dim p As Integer = 0
For p = 0 To 49
datagridview1.Rows.RemoveAt(0)
Next