Ohk pesaroso para a resposta acima, eu não vi a ligação que você deu.
O alimentador dataGridView1_CellValueNeeded fá-la toda. Esta função é responsável para povoar dados na lista de cliente no datagrid. Esta função é chamada sempre que há toda a mudança na grade mesmo se é redesenhada, resized ou qualquer coisa.
dataGridView1_CellValuePushed é chamado sempre que você introduz todo o valor na grade. Adiciona ou atualiza o objeto do cliente e quando você incorporou valores a ambas as colunas, dataGridView1_RowValidated é chamado e se os dados incorporados são válidos adiciona o objeto do cliente ao arraylist do cliente.
Assim fazendo o todo na sincronização.
Thx!
Trocas….