Добрый день! Почему-то не не обновляется объект IDataGrid.
Смотрю ActiveView.Items(1).DataField.DisplayValue там одно значение, а реально на экране совсем другое. Особенность грида в том что в DatasetLink указан редактируемый MemoryDataset, в котором так же установлено нормальное значение.
Обновляться прекращает после того как в форме нажимаешь ОК (не важно редактировался ли MemoryDataset). После чего всегда визуально отображается содержимое формы по которой был клик ОК, не смотря на то что открывается совсем другое содержимое...
И заметьте, т.к. это редактируемый грид, значение в DataField'е обновится только при выходе из режима редактирования ячейки (либо после нажатия на Enter)
Дмитрий, добрый день! Возможно я "ммм" не очень понятно пишу, но еще раз подчеркну
"AlexLS" написал:в DatasetLink указан редактируемый MemoryDataset, в котором так же установлено нормальное значение
"Олейник Дмитрий" написал:при выходе из режима редактирования ячейки
никакого редактирования не происходило, только открытие формы в которой в датасете и в гриде дебаггер показывает правильные значения а "глаза" видят значения из той формы в которой последний раз был апдейт/инсерт!
Ни разу не сталкивался с таким поведением. Грид не кеширует значения датасета. Мне кажется чтото не так с датасетом, привязанным к гриду, вернее скорее всего датасет, в котором корректные значения не привязан к гриду. Можете написать кейс воспроизведения, при котором грид визуально отображает данные старой (насколько я понял) формы?
Я также, желательно, приведите код заполнения memoryDataset'a.
где ds_TypeMecDetail - штатный датасет для данной детали,
ds_RequestStockTypeMec - датасет справочника, из которого подгружаются данные при Append
mdsTypeMecDetail - собственно меморидатасет, который и нужно заполнять в карточке
ParentDataset - датасет карточки редактирования записи, в которой и находится windowcontainer с гридом.
"Олейник Дмитрий" написал:Также не понял, почему используется GridAreaOnPrepare... Но тут нужно знать вашу бизнес задачу.
Исходно нужно реализовать "множественный выбор" (то есть все значения из справочника с галочками... очень похоже на деталь Доступ :smile: только в карточке редактирования).
Уже работающую деталь потребовалось положить в эдитвиндоу. Пытался "малой кровью" эту деталь использовать с подменой обычного датасета на меморидатасет.
Ага, я когда-то чтото подобное делал с напоминаниями: открывается каточка детали "напоминания" какого либо раздела, там есть лукапное поле контакт, жмем на лупу и открывается multi_select_window - можно выбрать несоклько контактов, а затем при закрытии краточки - на деталь добавлялось столько записей, сколько выбрано было контактов.
Посмотрите, может быть поможет:
[quote="Олейник Дмитрий"]Ага, я когда-то чтото подобное делал с напоминаниями: открывается каточка детали "напоминания" какого либо раздела, там есть лукапное поле контакт, жмем на лупу и открывается multi_select_window - можно выбрать несоклько контактов, а затем при закрытии краточки - на деталь добавлялось столько записей, сколько выбрано было контактов.
Посмотрите, может быть поможет:
Немного про мемориDS: это штука живет от Open() до Close(); Заполняется на OnDatasetAfterOpen(); После открытия датасета, можно позиционироваться на любой строке,и изменять любую ячейку:
Dataset.Edit();
Dataset.Post();
Все изменения грид перерисует самостоятельно.
Помните, что каждый рефреш, (Dataset.Close(), Dataset.Open()) вызывает перезаполнение датасета. Т.е. если вы не сохранили измененные данные куда то в таблицу БД, с которой заполняете датасет, то он заполнится старыми значениями.
Немного про мемориDS: это штука живет от Open() до Close(); Заполняется на OnDatasetAfterOpen(); После открытия датасета, можно позиционироваться на любой строке,и изменять любую ячейку:
Dataset.Edit();
Dataset.Post();
Все изменения грид перерисует самостоятельно.
Помните, что каждый рефреш, (Dataset.Close(), Dataset.Open()) вызывает перезаполнение датасета. Т.е. если вы не сохранили измененные данные куда то в таблицу БД, с которой заполняете датасет, то он заполнится старыми значениями.
С уважением,
Олейник Дмитрий
В какой-то момент меморидатасет перестает реагировать на Dataset.Close() и Dataset.Open().
Пишу
наконец нашел свой косяк:
в посте (записи из мемдатасета в реальный датасет) для мемдатасета делал DisableEvents(), а EnableEvents() забыл сделать.... теперь все обновляется!
Только почему-то если
Dataset.EnableEvents();
Dataset.Close();
то возникает ошибка:
TSObjectLibrary.MemoryDataset: Cannot focus a disabled or invisible window