11.10.2004, 14:28 | #1 |
Участник
|
FormDataSource.setCurrent
А кто-нибудь знает, что делает метод FormDataSource.setCurrent?
|
|
11.10.2004, 14:38 | #2 |
Модератор
|
имхо, устанавливает запись (record) текущей.
С Уважением, Георгий |
|
11.10.2004, 14:54 | #3 |
Administrator
|
Нет, не совсем. То есть совсем нет.
Если в форме несколько DataSource, в любой момент времени активным является только один. Когда вы нажимаете на кнопку "Фильтр..." (это воронка такая), фильтр устанавливается именно для текущего DataSource. setCurrent делает DataSource, для которого он вызван, текущим.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
11.10.2004, 14:55 | #4 |
Administrator
|
Запись текущей можно сделать с помощью findRecord.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
23.07.2019, 12:02 | #5 |
Участник
|
Через столько лет пришлось озадачится, что же все таки делает метод 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" на всех записях на которых вызовете clicked(). Пока не произойдет вызов executeQuery() или reread(). А без setCurrent() форма не хранит "новое значение" и сбрасывает, например, при переходе к другой записи. Проверял на DAX2012. |
|
23.07.2019, 16:48 | #6 |
Участник
|
Что изменится в вашем примере если закомментировать строку с table1_DS.setCurrent(); ?
Чем вас не устроил ответ 2004 года про активный датасурс? |
|
24.07.2019, 04:11 | #7 |
Участник
|
Издеваетесь). Ответ 2004 не устроил тем, что он не раскрывает смысла метода. Возможно он также делает и датасорс активным в некоторых случаях, с этим не разбирался, но это точно не его основное назначение.
Цитата:
Что изменится в вашем примере если закомментировать строку с table1_DS.setCurrent(); ?
Надо попробовать и становится понятно) |
|
24.07.2019, 09:56 | #8 |
Участник
|
А может, что как раз сохранение значения является побочным эффектом установки активности, а не наоборот
Для чего вообще нужен эффект сохранения значения? При каком сценарии работы это может понадобится? Использовать элемент управления Grid без бинда к таблице? Ну такое ... Для справки. У датасутса есть внутренний признак того изменена ли текущая запись или нет. В зависимости от значения этого признака получаем разное поведение. Изменить этот признак можно методом DS.ForeWrite() Запись не сохраняется при переходе на другую в гриде |
|
24.07.2019, 11:26 | #9 |
Участник
|
Цитата:
X++: if (inventJournalTrans.InventDimId != inventDim.InventDimId)
{
inventDim.data(InventDim::find(inventJournalTrans.InventDimId));
inventDim_ds.setCurrent();
} Цитата:
Для чего вообще нужен эффект сохранения значения?..
Цитата:
..Изменить этот признак можно методом DS.ForсeWrite()..
X++: table1.field1 = "новое значение"; table1_DS.ForeWrite(false); |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
24.07.2019, 11:48 | #10 |
Участник
|
Цитата:
Запускаю форму, жму кликед. Нажимаю Ctrl+F3 и вижу запрос к table1. table2_DS не активизировался. Т.е. основное, по вашей версии, назначение метода не срабатывает. Или я чтото сделал не так? ) |
|