Блин, что за адово нагромождение if/else, сделайте уже таблицу переходов. И где там у вас foreach, который не работает? Вы предлагаете нам самим его искать и угадывать тот ли это foreach? Если хотите получить ответ на вопрос, потрудитесь облегчить работу тем, кто будет отвечать.
if (che.GetType().ToString().IndexOf("CheckBox") > -1)
ААААА!!!!! Срочно напишите заявление об увольнении, ну нельзя же так, господи!!!