Как минимум нужна ветка else, возвращающая возможность редактирования, если пользователь вернулся на доступную к редактированию строку.
X++:
if (rContractTable.ContractType == Agreement::PrimaryContract)
{
fld.allowEdit(false);
}
// -->>
else
{
fld.allowEdit(true);
}
// <<--
Тогда такой if можно вообще заменить одной строкой:
X++:
// -->>
// if (rContractTable.ContractType == Agreement::PrimaryContract)
// {
// fld.allowEdit(false);
// }
// else
// {
// fld.allowEdit(true);
// }
fld.allowEdit(rContractTable.ContractType != Agreement::PrimaryContract);
// <<--