powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
32 сообщений из 32, показаны все 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
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741593
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вижу по анимашке, что сохранение происходит только после перехода на др. запись.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741595
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

сохранение в базу (dataset.Post) -- да, после перехода на новую строчку (можно наблюдать по дб-навигатору или значку редактирования строки в дб-грида)... Сохранение в датасет же -- после перехода на соседнюю ячейку или нажатие энтер (там есть и то, и то на анимации -- проверяется по изменению этого же значения в других контролах).
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741596
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я о чем и пишу. Что нужно самому дописывать код отправки данных.
При этом, во время редактирования IdEditing в дереве возвращает False, а в сетке - True. Как-то нелогично.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741597
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

в этом тестовом приложении нет ни одной строчки кода, только dfm.

pas
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
unit Unit24;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxCustomData,
  cxStyles, cxTL, cxMaskEdit, cxTextEdit, cxTLdxBarBuiltInMenu, cxFilter, cxData, cxDataStorage, cxEdit, cxNavigator,
  Data.DB, cxDBData, dxmdaset, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxGridCustomView, cxGrid, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids, cxInplaceContainer, cxDBTL, cxTLData;

type
  TForm24 = class(TForm)
    cxDBTreeList1: TcxDBTreeList;
    dxMemData1: TdxMemData;
    DataSource1: TDataSource;
    dxMemData1a1: TStringField;
    dxMemData1a2: TIntegerField;
    dxMemData1a3: TSmallintField;
    cxDBTreeList1RecId: TcxDBTreeListColumn;
    cxDBTreeList1a1: TcxDBTreeListColumn;
    cxDBTreeList1a2: TcxDBTreeListColumn;
    cxDBTreeList1a3: TcxDBTreeListColumn;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    cxGrid1DBTableView1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    cxGrid1DBTableView1RecId: TcxGridDBColumn;
    cxGrid1DBTableView1a1: TcxGridDBColumn;
    cxGrid1DBTableView1a2: TcxGridDBColumn;
    cxGrid1DBTableView1a3: TcxGridDBColumn;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form24: TForm24;

implementation

{$R *.dfm}

end.



dfm
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
object Form24: TForm24
  Left = 0
  Top = 0
  Caption = 'Form24'
  ClientHeight = 456
  ClientWidth = 1044
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object cxDBTreeList1: TcxDBTreeList
    Left = 8
    Top = 8
    Width = 337
    Height = 129
    Bands = <
      item
      end>
    DataController.DataSource = DataSource1
    DataController.ParentField = 'RecId'
    DataController.KeyField = 'RecId'
    Navigator.Buttons.CustomButtons = <>
    RootValue = -1
    TabOrder = 0
    object cxDBTreeList1RecId: TcxDBTreeListColumn
      Visible = False
      DataBinding.FieldName = 'RecId'
      Position.ColIndex = 0
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
    object cxDBTreeList1a1: TcxDBTreeListColumn
      PropertiesClassName = 'TcxTextEditProperties'
      DataBinding.FieldName = 'a1'
      Position.ColIndex = 1
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
    object cxDBTreeList1a2: TcxDBTreeListColumn
      DataBinding.FieldName = 'a2'
      Position.ColIndex = 2
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
    object cxDBTreeList1a3: TcxDBTreeListColumn
      DataBinding.FieldName = 'a3'
      Position.ColIndex = 3
      Position.RowIndex = 0
      Position.BandIndex = 0
      Summary.FooterSummaryItems = <>
      Summary.GroupFooterSummaryItems = <>
    end
  end
  object DBGrid1: TDBGrid
    Left = 351
    Top = 8
    Width = 320
    Height = 129
    DataSource = DataSource1
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object DBNavigator1: TDBNavigator
    Left = 351
    Top = 143
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 2
  end
  object cxGrid1: TcxGrid
    Left = 8
    Top = 143
    Width = 337
    Height = 250
    TabOrder = 3
    object cxGrid1DBTableView1: TcxGridDBTableView
      Navigator.Buttons.CustomButtons = <>
      DataController.DataSource = DataSource1
      DataController.Summary.DefaultGroupSummaryItems = <>
      DataController.Summary.FooterSummaryItems = <>
      DataController.Summary.SummaryGroups = <>
      object cxGrid1DBTableView1RecId: TcxGridDBColumn
        DataBinding.FieldName = 'RecId'
        Visible = False
      end
      object cxGrid1DBTableView1a1: TcxGridDBColumn
        DataBinding.FieldName = 'a1'
      end
      object cxGrid1DBTableView1a2: TcxGridDBColumn
        DataBinding.FieldName = 'a2'
      end
      object cxGrid1DBTableView1a3: TcxGridDBColumn
        DataBinding.FieldName = 'a3'
      end
    end
    object cxGrid1Level1: TcxGridLevel
      GridView = cxGrid1DBTableView1
    end
  end
  object dxMemData1: TdxMemData
    Active = True
    Indexes = <>
    Persistent.Data = {
      5665728FC2F5285C8FFE3F030000001400000001000300613100040000000300
      030061320002000000020003006133000108000000F1F2F0EEEAE02031011700
      00000100000108000000F1F2F0EEEAE0203201580100000101000108000000F1
      F2F0EEEAE0203301060000000100000108000000F1F2F0EEEAE0203401370000
      00010000}
    SortOptions = []
    Left = 320
    Top = 32
    object dxMemData1a1: TStringField
      FieldName = 'a1'
    end
    object dxMemData1a2: TIntegerField
      FieldName = 'a2'
    end
    object dxMemData1a3: TSmallintField
      FieldName = 'a3'
    end
  end
  object DataSource1: TDataSource
    DataSet = dxMemData1
    Left = 320
    Top = 72
  end
end

...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741600
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо, чтобы в базу передавались значения после изменения в каждой ячейки, то можно на событии дерева OnEdited вызывать tree.Post:


...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741616
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi, я это и доказываю с самого начала, что нужно самому заботиться, а TcxDBTreeList(sender).DataController.IsEditing возвращает false.
...
Рейтинг: 0 / 0
TcxDBTreeList.DataController.IsEditing возвращает False во время редактирования
    #39741617
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiто можно на событии дерева OnEdited вызывать tree.Post:

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


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