Not very clear what are your trying to do here:
int rid = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
SqlDataSource1.DeleteParameters["id"].DefaultValue = rid.ToString();
SqlDataSource1.Delete();
Looks like you ware trying to remove the whole row that were selected. Don't know where is it related to reports!
If you are trying to remove rows, then I doubt it is not the correct way. Use DEBUGGER and you will see that once you delete a particular row then the row counts reduces and thus the for loop goes out of existing row counts.