Навскидку - Вы вот этим своим действием
dataGridView1.CurrentCell = dgwc;
случайно, не генерируете событие CellLeave. Ну и так далее, вплоть до переполнения стека.
Как бороться? В обработчике сначала отключите обработку события CellLeave, а в конце - подключите опять.