Показать сообщение отдельно
Старый 23.07.2019, 12:02   #5  
Perc is offline
Perc
Участник
 
193 / 47 (2) +++
Регистрация: 05.03.2005
Через столько лет пришлось озадачится, что же все таки делает метод setCurrent. И правильного ответа здесь не нашел. Но выяснил.
setCurrent пихает данные из текущего курсора FormDataSource в кэш данных FormDataSource. Пример для понимания. cliked на форме с датасорсом table1:
X++:
void clicked()
{
    Table1   t1;
    ;
    super();
    info(strFmt("%1", table1.field1));
    t1.data(table1);
    t1.field1 = "новое значение";
    table1.data(t1);
    table1_DS.setCurrent();
    info(strFmt("%1", table1.field1));
}
Замысловатое изменение field1 через data() делалось для того чтобы не сработал write на датасорсе. Метод table1.data(t1) не провоцирует форму автоматически сохранять запись.
И получается что этот код не меняет данных в БД, но форма будет отображать "новое значение" в поле "field1" на всех записях на которых вызовете clicked(). Пока не произойдет вызов executeQuery() или reread().
А без setCurrent() форма не хранит "новое значение" и сбрасывает, например, при переходе к другой записи.
Проверял на DAX2012.