+
Скорее всего, можно пойти по следующей условной схеме:
В теле цикла:
1. модификация значения: pIterator->CurrentRow()->SetValue
2. отражение изменения по всем индексам, кроме pIndex: Indexes.OnChangeValue(i, nDestCol, pIndex)
для этого потребуется перегруженный вариант OnChangeValue, с пропуском pIndex
После окончания:
3. отражение изменения по pIndex.
В принципе, п. 3 не нужен, ибо приведет к тем же самым проблемам
Лучше явно задокументировать, что индекс, по которому идет заполнение, модифицироваться не должен.
И выбрасывать исключение при попытке его модифицировать (изменить зависимые колонки).
Если так сделать, то и перегруженный вариант Indexes.OnChangeValue не нужен.
P.S.
Не уверен, что мне удалось все 100% понятно объяснить.
Но я старался