powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
25 сообщений из 32, страница 1 из 2
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741498
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу, чтобы по нажатию на Enter заканчивалось редактирование дерева и данные сохранялись в базу.

Код на событии OnKeyDown
Код: pascal
1.
2.
  if TcxDBTreeList(sender).DataController.IsEditing and (key = VK_RETURN) then
    TcxDBTreeList(sender).DataController.Post;


Но IsEditing почему-то False, хотя дерево явно в режиме редактирования. Это видно также и по курсору в индикаторе



Левая рука не ведает, что делает правая?
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741501
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу добавить, то DataSet.State возвращает dsEdit, т.е. ещё одно подтверждение.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741507
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Хочу, чтобы по нажатию на Enter заканчивалось редактирование дерева и данные сохранялись в базу...
Код: pascal
1.
 ...TcxDBTreeList...

...
Просто для соответсвующих колонок твоего TcxDBTreeList установи флажок Properties.ImmediatePost, и все.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741509
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Универсальное лечение девок для любителей извратиться -- PostMessage.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741510
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi, ???
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741516
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Когда нужно сделать какие-то вещи в реалтайме, то надо дождаться пока компоненты девок закончат все обработки внутри. Т.е. мы ловим событие OnKeyDown и делаем свои вещи, например, пост в контроле/дереве -- после чего отслыаем сообщение на форму через PostMessage (гугл ит), ловим его на форме и уже смотрим результат. Это гарантирует нам, что девки закончили свои данные сохранять и сделали всё, что положено.

В противном случае могут быть вот такие вещи типа устаревших данных в EditValue или еще что.

Конечно, этим надо пользоваться в крайнем случае, когда не хватает стандартной функциональности вроде ImmidiatePost, как написали выше.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741520
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра, у TextEdit нет свойства ImmediatePost, даже если и было бы, а что ImmediatePost - это реакция на Enter?
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741523
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал так
Код: pascal
1.
2.
  if (TcxDBTreeList(sender).DataController.DataSource.DataSet.State in [dsEdit, dsInsert]) and (key = VK_RETURN) then
    TcxDBTreeList(sender).DataController.Post;
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741524
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

при нажатии на энтер он должен закончить редактирование в ячейки, после чего в ней сработает событие EditValueChanged.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741526
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi, кто "он"
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741533
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

контрол/редактор/трилист... в данном случае это текстовое поле, которое по энтеру делает Post (это про контрол, не датасет) нового значения и сохраняет его в дереве в конкретной ячейке (в датаконтроллере).
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741540
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Фэйтл Эра, у TextEdit нет свойства ImmediatePost...
Может быть, оно не опубликовано, но оно как минимум паблик. То есть, доступно из кода.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741541
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11... а что ImmediatePost - это реакция на Enter?Это реакция на завершение редактирования отдельного поля. Для текстовых полей это обычно Enter, для чекбоксов - просто клик.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741549
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiв данном случае это текстовое поле, которое по энтеру делает Post

В том-то и дело, что не делает. Ничего не происходит вообще. Я же не ради забавы допиливаю сам.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741550
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра, нет такой реакции, т.е. завершение редактирования не происходит автоматически.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741552
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

в датасет и не будет завершения -- надо на oneditvaluechanged вызвать (или еще как), например, focusednode.endedit -- тогда все данные попадут в датаконтроллер-датасет (произойдет то самое окончание рдактирования текущей записи).
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741554
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не про датасет. Вы же пишите про дерево, как я понял. Что дерево по Интеру должно само завершать редактирование.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741562
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

надо понимать структуру в момент редактирования:
- девовский контрол, где работает пользователь (создается каждый раз заново при начале редактирования прямо, прямо поверх грида/трилиста);
- трилист, который просто отображает данные и ничего не хранит;
- датаконтроллер, который хранит и синхронизирует данные (это как хранилище временных данных, так и просто посредник между датасетом и редактором/деревом);
- датасет, к которому подключен датаконтроллер.

Так вот, в процессе редактирования все изменения происходят в виртуальном контроле. И данные из него попадут дальше по цепочке только после того, как пользователь в нем завершит редактирование (для текстового поля это тот же enter, смена фокуса, для комбобокса с ImmidiatePost это выбор из выпадающего списка, вызовет EndEdit/PostEdit/Аналог и т.д.).

Как только контрол закончил редактирование его данные передаются дальше по цепочке в датаконтроллер, который и решает, что с ними делать. Во-первых, эти данные он сохраняет к себе (НЕ в датасет). На временное хранение. И только если мы поменяем строку на новую, вызовем у нода EndEdit или еще как -- они эти данные перешлет в датасет.

Может кто поправит, если где неточности есть.

Т.е. последовательность, чтобы данные реально попали в датасет:
- сделать принудительное сохранение у текущего редактора (какой-нибудь control.PostEditingValue);
- сделать принудительное окончания редактирования у датаконтроллера (текущего нода -- EndEdit).
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741564
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi(для текстового поля это тот же enter,

Я нажимаю Enter и ничего не происходит. Редактирование не завершается.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741566
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi, я уже запутался. Сначала ты пишешь, что по Enter`у данные должны сохраниться, потом это отрицаешь.

Или по Enter`у данные сохраняются не где-то внутри виртуального хранилища? И программист должен добавить свой код, чтобы из виртуального хранилища сохранение пошло дальше в базу?
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741567
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё по поводу ImmidiatePost и чекбокса в cxGrid`е: тоже самое я утверждаю, что мышкой чекбокс меняет свое значение. Но всё равно нужно дописывать код, чтобы редактирование завершилось и данные попали в базу.

Но в cxGrid DataController.IsEditing возвращает TRUE, в оличие от cxDBTreeList.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741571
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Сейчас проверил грид и трилист с настройками по умолчанию -- постинг измененных значений и синхронизация с датасетом идет сразу, даже по enter, ничего настраивать не надо. Т.е. начинаем редактировать текст, жмем ентер -- всё, редактирование прекратилось и текст сохранился.

Пример (трилист, дбгрид и cxгрид):
http://i67.tinypic.com/28vwphy.gif
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741572
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гифка не приложилась:

...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741589
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это привязано к базе?
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741592
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

да, обычные db-трилист и дб-вьюха для грида. Без доп настроек, просто кинутые на форму и подключенные к общему датасету (dxmemdata).
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]