Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / cxGrid + cxmemTable + datasource + TcxGridDBTableView / 21 сообщений из 21, страница 1 из 1
13.09.2020, 01:22
    #39998011
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Хочу при редактировании грида в определенных колонках записать в грид в другую колонку данные.

Есть событие при редактировании данных и в нем это можно это сделать.

Код: pascal
1.
2.
3.
4.
5.
6.
procedure GridDBTableViewEditChanged(
  Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin


end;



Но хотелось бы другое событие, потому как это срабатывает при каждом нажатии клавиши, а лучше то, которое после валидации данных происходит. т.е. закончено редактирование.

В общем хочу, что бы при редактировании колонок с именами FieldName "Address", "NameUser", "Company" я мог записать в колонку "Infouser" мог записать текстовую информацию и она сохранилась в MemData и отобразилась в Grid.

Не знаю как в текущей записи изменить данные в гриде или MemData
...
Рейтинг: 0 / 0
13.09.2020, 01:49
    #39998013
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
А причем тут грид? OnBeforePost
...
Рейтинг: 0 / 0
14.09.2020, 13:30
    #39998307
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
white_nigger
А причем тут грид? OnBeforePost


А при чем тут OnBeforePost. Возникает только когда добавляется новая строка.

А мне надо при редактировании конкретной колонки причем при редактировании именно пользователем менять значение другой колонки. OnAfterEdit то же не подходит. Возникает только при начале редактировании записи и при редактировании другой колонки этой же записи уже не работает. Хотя это и логично.
...
Рейтинг: 0 / 0
14.09.2020, 13:45
    #39998315
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
...
Рейтинг: 0 / 0
14.09.2020, 14:01
    #39998322
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
DimaBr


О спасибо. Понял теперь как поля присваивать. Часть задачи решено.

Теперь бы узнать в какой колонке это произошло.

И еще вот проблема Post возникает при переключении на другую запись. А если пользователь перейдет на соседнию колонку этой же записи, то это событие не произойдет. Edti так же работает. Поэтому и смотрел в сторону грида, там есть больше событий и какое-то должно подойти.

В других компонентах я использовал событие onValidate оно возникало, если пользователь отредактировал данные и закончил их редактировании к конкретной колонке.
...
Рейтинг: 0 / 0
14.09.2020, 14:25
    #39998336
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik

И еще вот проблема Post возникает при переключении на другую запись. А если пользователь перейдет на соседнию колонку этой же записи, то это событие не произойдет.

Переход на другую колонку не есть окончание редактирования.
...
Рейтинг: 0 / 0
14.09.2020, 14:32
    #39998342
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Варианты
1. View.OnEditValueChanged
2. в View.OnFocusedItemChanged проверять состояние Датасета
...
Рейтинг: 0 / 0
14.09.2020, 15:42
    #39998372
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
еще вот проблема Post возникает при переключении на другую запись. А если пользователь перейдет на соседнию колонку этой же записи, то это событие не произойдет
если нужно вмешиваться до завершения редактирования записи то цепляться в tdatasource.ondatachange. в визуальщине при этом включить immediatepost
...
Рейтинг: 0 / 0
14.09.2020, 16:09
    #39998384
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
В общем хочу, что бы при редактировании колонок с именами FieldName "Address", "NameUser", "Company" я мог записать в колонку "Infouser" мог записать текстовую информацию

В смысле, нужен просто-напросто Calculated field?
...
Рейтинг: 0 / 0
14.09.2020, 17:01
    #39998424
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Начнем с начала.

Я нахожусь в гриде. Меняю значение какого-то поля. Если имя поля "User", а не любое другое, то я хочу в этой же записи в поле "AddInfo" добавить служебную информацию, просто какой-то текст. Вот и все.
И это должно произойти когда я после редактирования перешел в другую ячейку грида или фокус с грида ушел. Т.е. тогда когда я завершил редактирование ячейки. Не в момент начала, не во время, а именно в конце редактирования.

Это не поле Calculated field.

События Post, Edit не подходят потому как если ты остался в этой же записи, то ничего не произходит при повторных изменениях данных. EditChanged срабатывает при вводе любого символа, а это вызов процедуры ненужное количество раз.
tdatasource.ondatachange возникае при добавлении новый записи, при попытке редактировать, при самом редактировании.
А это потребует добавления всяких проверок, что бы по 100 раз не возникали не нужные события.
...
Рейтинг: 0 / 0
14.09.2020, 23:17
    #39998566
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
EditChanged срабатывает при вводе любого символа.

OnEditValueChanged
...
Рейтинг: 0 / 0
15.09.2020, 00:11
    #39998576
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
Если имя поля "User", а не любое другое, то я хочу в этой же записи в поле "AddInfo" добавить служебную информацию, просто какой-то текст. Вот и все.

Jonnik
Это не поле Calculated field.
Да, это странная архитектура. Зачем хранить эту информацию в этой же записи, если её всегда можно вычислить?
...
Рейтинг: 0 / 0
15.09.2020, 08:34
    #39998600
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
tdatasource.ondatachange возникае при добавлении новый записи, при попытке редактировать, при самом редактировании.
А это потребует добавления всяких проверок, что бы по 100 раз не возникали не нужные события
ну если так не сгущать то там все проще, а более универсального варианта и нет
...
Рейтинг: 0 / 0
15.09.2020, 09:50
    #39998615
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
я хочу в этой же записи в поле "AddInfo" добавить служебную информацию, просто какой-то текст. Вот и все.

Именно добавить? То есть что-то типа лога, если десять раз поменять значение Вася -> Петя -> Вася -> Петя, то ляжет десять добавлений? Обычно такое делают на стороне сервера, в крайнем случае при сохранении (потому что не нужны промежуточные колебания - что было пока пользователь редактировал). Если нужны... тогда, пожалуй, действительно нужно садиться на события смены фокуса, а на событиях типа Changed копить информацию для них.
...
Рейтинг: 0 / 0
15.09.2020, 12:10
    #39998671
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
DimaBr
Jonnik
EditChanged срабатывает при вводе любого символа.

OnEditValueChanged



Идеально подходит. Срабатывает именно тогда когда надо.

Теперь как в этой функции узнать, что я сейчас отредактировал поле именно с именем "User" и если да, то как в поле "AddInfo" этой же записи добавить информацию к примеру текущее время (что бы понятнее было всем)

Код: pascal
1.
2.
3.
4.
5.
procedure GridDBTableViewEditValueChanged(
  Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
 
end;
...
Рейтинг: 0 / 0
15.09.2020, 12:20
    #39998676
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik

Теперь как в этой функции узнать, что я сейчас отредактировал поле именно с именем "User" и если да, то как в поле "AddInfo" этой же записи добавить информацию к примеру текущее время (что бы понятнее было всем)

Код: pascal
1.
2.
3.
4.
5.
procedure GridDBTableViewEditValueChanged(
  Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
 
end;

...
Рейтинг: 0 / 0
15.09.2020, 13:19
    #39998726
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
DimaBr
Jonnik

Теперь как в этой функции узнать, что я сейчас отредактировал поле именно с именем "User" и если да, то как в поле "AddInfo" этой же записи добавить информацию к примеру текущее время (что бы понятнее было всем)

Код: pascal
1.
2.
3.
4.
5.
procedure GridDBTableViewEditValueChanged(
  Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
 
end;



Первое
По AItem можно узнать, только Caption колонки, а мне надо FieldName колонки. В DataBinding там почему-то нет этого свойства.

Второе.
AItem это колонка текущая, а мне надо записать данные в другую колонку этой же записи. Не знаю как от сюда это сделать.

Строго не судите, а только недавно начал изучать Dev. Много не понятно.

.
...
Рейтинг: 0 / 0
15.09.2020, 13:41
    #39998752
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
По AItem можно узнать, только Caption колонки, а мне надо FieldName колонки. В DataBinding там почему-то нет этого свойства.
Код: pascal
1.
2.
3.
4.
procedure GridDBTableViewEditChanged(Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
  ShowMessage(AItem.ClassName);
end;



В общем случае
Код: pascal
1.
2.
3.
4.
procedure GridDBTableViewEditChanged(Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
  if AItem = MyColumn then MyDataset['MyField'] := 'нужное значение'
end;
...
Рейтинг: 0 / 0
15.09.2020, 13:57
    #39998766
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Код: pascal
1.
(AItem as TcxGridDBColumn).DataBinding.FieldName
...
Рейтинг: 0 / 0
15.09.2020, 15:11
    #39998833
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Jonnik
В DataBinding там почему-то нет этого свойства
закастить к TcxGridItemDBDataBinding надо
Jonnik
недавно начал изучать Dev
но лучше по максимуму работать на уровне датасета/датасорса чтоб минимизировать завязку на конкретные дб-аварные компоненты
...
Рейтинг: 0 / 0
16.09.2020, 08:39
    #39999176
Jonnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cxGrid + cxmemTable + datasource + TcxGridDBTableView
Всем спасибо. Получилось, то что хотел.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / cxGrid + cxmemTable + datasource + TcxGridDBTableView / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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