Problem is at this line
GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Text
Check that GridView1.Rows contains that many rows. It seems that it does not. For example Convert.ToInt32(e.CommandArgument) is returning 2 but the GridView1 does not contain two rows.
Check the value of Convert.ToInt32(e.CommandArgument) and fix it