Your issue is that you call Binddata() on every iteration of a row.
Move the Binddata() call out of the foreach completely. Don't rebind your data until you are done processing.
foreach (GridViewRow row in GridView1.Rows)
CheckBox chk = (CheckBox)row.FindControl("CheckBox1");
int id = Convert.ToInt32("",GridView1.DataKeys[row.RowIndex].Value);
SqlConnection sqlconn = new SqlConnection("server=.\\sqlexpress;database=practice;integrated security=true");
SqlCommand sqlcomm = new SqlCommand("delete from prac where id='"+id+"'", sqlconn);
Label1.Text = "Record Deleted";