Because your code doesn't compile, so what you are running isn't the code you think it is.
Your line of code inside the
loop needs to be terminated with a semicolon - and until it is, it won't compile, so no EXE file is generated.
Without the system producing a new EXE file, the app you run to test it is the old version, which probably doesn't contain the loop at all!
But why are you doing it like that?
You have a
loop that processes each row in turn - so why do you use that row to fetch it's row index and use that to find the row?
Try this instead:
foreach (DataGridViewRow dr in dataGridView1.Rows)
dr.Cells[Constants.DCAMOUNTOREDEEM].Value = dr.Cells[Constants.DCOFFERVALUE].Value;
And do your testing in the debugger: it will tell you the EXE isn't up-to-date and allow you to look at your code line by line when it doesn't work properly - so you can see what is going wrong and fix it!