int ID = int.Parse((sender as LinkButton).CommandArgument);
Here you are getting the ID of the row, from where button is clicked. Then you are looping through all the rows and using this ID. That is wrong. That means for every row, the ID will be the same.
Inside the loop, you should get the ID. But ideally, I think, you should only update the row, from where button is clicked. Why you are updating all the rows? This is not logical.