That is a very nasty way to do things, it introduces so many ways that you could get a problem.
First off:
int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString());
Why? Why convert it to a string, in order to convert it back to an int? If the ToString does not return you a numeric value, then the convert will fail and it won't work. If it will return a numeric value, then why are you converting it you a string in the first place?
Secondly: Do not concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead. All it would take to destroy you database is a couple of characters in any address field: easy to enter, deliberately or by accident.
SqlCommand cmd = new SqlCommand("update tbladminreg set Address1=@AD1, Address2=@AD2, Country=@CNT, Pincode=@PNC where id=@ID", con);
cmd.Parameters.AddWithValue("@AD1", txtAddress1.Text);
cmd.Parameters.AddWithValue("@AD2", txtAddress2.text);
...
Fix them, see if it works afterwards.