Ohk Sorry for the above answer, I didnt see the link you gave.
The handler dataGridView1_CellValueNeeded does it all. This function is responsible for populating data in the customer list into the datagrid. This function is called whenever there is any change on the grid even if it is redrawn, resized or anything.
dataGridView1_CellValuePushed is called whenever you insert any value in the grid. It adds or updates the Customer object and when you have entered values in both the columns, dataGridView1_RowValidated is called and if the data entered is valid it adds the customer object to the customer arraylist.
Thus making it all in sync.
Thx!
Swaps....