volser Цитата: Не совсем так. Можно на форме сделать кнопку "Обновить данные" на клик которой переоткрывать набор данных. Если пользователь хочет увидеть изменения, то он нажимает на эту кнопку и получает новые данные.
Да это не вопрос, такая кнопка давно есть.
Проблема в том, что не заставлю же я каждый раз пользователя нажимать эту кнопку перед, допустим, добавлением записи в дерево.
А получается, следующее: Если с одного клиента добавить запись в дерево и потом с другого клиента без реопена датасета добавлять запись на тот же уровень дерева, возникает ошибка уникальности по первичному ключу (ID+PARENT_ID) в таблице дерева. Как я понимаю, это происходит потому, что при добавлении записи DbTreeView не получает обновленные данные с сервера и, соответственно, не может правильно сгенерировать новый ID.
Или например, добавляет юзер подузел в дерево, а на другом клиенте перед этим родителя этого подузла удалили, после обновления (реопена датасета) добавленный подузел улетает в корень дерева, т.к. его PARENT_ID ссылается на несуществующий объект.
Мне сначала представлялось, что DbTreeView может оперативно видеть обновленные данные на серваке как-то обрабатывать такии коллизии, выходит что это не так
Получается надо вешать реопен всего датасета плюс писать соответствующие проверки на событие перед добавлением записи, но это как-то некрасиво, и долго если это будет очень большая таблица, был бы мягкий рефрешь какой-нибудь....
Ну или еще вариант, самому генерить новый ID, но это все равно только через селект к таблице дерева