В случае если в MemoryDataset'e используется сортировка, то при сохранении записи, если изменение повлекло изменение порядка происходит "внутренняя сортировка", т.е. происходит сортировка записей всего грида/датасета, а перерисовывается только текущая строчка грида и в ней одной отображаются корректные данные.
Каким образом можно обойти данную проблему.
Может можно отключить автоматическую сортировку перед сохранением.
Или волшебная команда типа grdData.Repaint (пробовал, не помогло).
Или может есть бинарные файлы с корректной работой этой связки, у нас версия 3.3.2.203.
Помогите уважаемые гуру!

Нравится

6 комментариев

Здравствуйте Валерий,
Пытался воспроизвести данную проблему, возникили вопросы.
Как вы заполняете MemoryDataset ?
Выводится ли все корректно если сделать обновление реестра?

Вышлите пожалуйста сервисы, в вашем варианте.

Здравствуйте, Алексей!
Прикрепляю файл с отредактированными сервисами.
При запуске после добавление нескольких строк ->Сортировка -> редактирование даты, которое приводит к изменению порядка строк и проблема воспроизведется.
..\Bin\TSClient.exe /wnd=wnd_mdsvihGridArea1

MemoryDataset заполняется либо через dlData.Dataset.Append(), затем исправляется дата на необходимую.
Если предварительно сделать обновление реестра , то проблема исчезает.

Но обновлять реестр после каждого изменения это не серьезно.

В реестре после редактирования ячейки (после Post) происходит обновление текущей строки, но не предусмотрено, что из-за сортировки MemoryDataset сам изменит не только текущую, но и все остальные записи. Т.е. самым простым решением будет обновление датасета.
Но на самом деле хватило бы просто обновление реестра (без переоткрытия датасета). Поэтому в вашем случае можете применить обходное решение: на AfterPost делайте выключение/включение событий датасета. Выглядеть это будет так:

function dlDataOnDatasetAfterPost(Dataset) {
	Dataset.DisableEvents();
	Dataset.EnableEvents();
}

Спасибо!
Все заработало!

Показать все комментарии