|
25.12.2009, 11:41 | #1 |
Участник
|
Формируемое поле на Grid
Вопрос, похоже, простой, но тем не менее. Одно из полей таблицы, показанное на
Grid является производным от нескольких полей в той же таблице. 1. В каком в методе лучше окончательно формировать это поле: leaveRecord() или write() этой формы или еще где то? 2. Как показать (обновить на Grid) это поле при уходе с этой записи ? В каком методе ? |
|
25.12.2009, 11:51 | #2 |
Боец
|
Цитата:
Сообщение от pwp
Вопрос, похоже, простой, но тем не менее. Одно из полей таблицы, показанное на
Grid является производным от нескольких полей в той же таблице. 1. В каком в методе лучше окончательно формировать это поле: leaveRecord() или write() этой формы или еще где то? 2. Как показать (обновить на Grid) это поле при уходе с этой записи ? В каком методе ? или в методах insert+update. На гриде поле обновится автоматом. |
|
25.12.2009, 12:03 | #3 |
Участник
|
Цитата:
"или в методах insert+update." - на таблице или источнике данных ? Да вот не обновляется автоматом, нужен dataSource_DS.research() только вот куда его поставить ? |
|
25.12.2009, 12:07 | #4 |
Участник
|
|
|
25.12.2009, 12:16 | #5 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: pwp (1). |
25.12.2009, 12:27 | #6 |
Участник
|
|
|
25.12.2009, 13:18 | #7 |
Гость
|
Ax3SP6
Research() обновляет весь список и курсор может встать не в ту строку, которую Вы редактировали (если строк больше одной и редактировали строку где-нибудь в середине). В результате Вы начнете беспокоиться о методах позиционирования в гриде. Следование совету DSPIC (перекрытие метода modifiedField на таблице), позволит избежать беспокойства. Обновить на экране строчку методом refresh() можно прямо из modifiedField на таблице. Последний раз редактировалось Кирилл; 25.12.2009 в 13:23. |
|
25.12.2009, 12:04 | #8 |
Участник
|
Если производное поле создано только для отображения вспомогательной информации и хранить в БД его значение не нужно, то можно (даже нужно) заменить его на display метод
|
|
25.12.2009, 12:06 | #9 |
Участник
|
|
|
25.12.2009, 12:13 | #10 |
Участник
|
Цитата:
Если вы хотите увидеть изменения произошедшие не в активной строке грида, то вам действительно необходимо принудительно сделать reread и refresh этой строке (по умолчанию перерисовывается только активная) |
|
25.12.2009, 12:20 | #11 |
Боец
|
Цитата:
X++: public void modifiedField(fieldId _fieldId) { super(_fieldId); switch (_fieldId) { case fieldnum(Table2, ItemId1): case fieldnum(Table2, ItemId2): this.calcItemId(); break; } } X++: void calcItemId()
{
;
this.ItemId = this.ItemId1 + this.ItemId2;
} X++: if (this.isFormDataSource())
{
this.dataSource().refresh();
} |
|
25.12.2009, 16:00 | #12 |
Участник
|
Посмотреите может, как это сделано на InventSum? Я не полностью прочитал тему, но вроде как Вам должно подойти - там как раз много полей, которые являются производными от других полей
|
|
|
За это сообщение автора поблагодарили: pwp (1). |
25.12.2009, 20:31 | #13 |
Мрачный тип
|
Делал аналогичное, расчет жил в validateField на таблице, ничего обновлять не приходилось - значения расчитываемых полей менялось в grid'е при смене фокуса в полях таблицы.
DAX 3 SP3
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
26.12.2009, 09:00 | #14 |
Участник
|
Ок, вот это похоже эффективней всего, спасибо всем, принявшим участие, эту тему можно пока прикрыть.
|
|