Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 25 апр 2024, 09:35

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Значение CheckBox до Post
СообщениеДобавлено: 21 окт 2021, 10:09 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
Здравствуйте. Подскажите, пожалуйста, как мне получить значение CheckBox до Post. Нажимаю на CheckBox в DBGridEh - ставится галочка (или нет). Но в датасете (MemTableEh), конечно, старое значение. А мне нужно знать значение вот прям сейчас, т.е. сделать Post и считать это значение из датасета. Какое свойство DBGridEh или MemTableEh мне можно использовать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 21 окт 2021, 10:34 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Если под термином DataSet подразумевается тот TDataSet который подключается к DBGridEh по цепочке DBGridEh-DataSource-DataSet то, при настройке колонки грида для отображения Чекбоксов (CheckBox), DBGridEh всегда сразу записывает изменения в поле DataSet'а.
Текущее значение CheckBox'а всегда берется из поля DataSet'а при каждой отрисовки ячейки.

Если у вас есть ощущение того, что DataSet содержит значение поля, отличное от того, которое показывается в колонке грида с CheckBox'ом, то присылайте Демо проект. Будем разбираться.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 21 окт 2021, 10:48 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
Код:
procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
begin
    Edit1.Text := Column.Field.Value
end;


Вложения:
CheckBox.zip [4.6 KiB]
Скачиваний: 61
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 21 окт 2021, 12:16 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.
Когда пользователь кликает на ячейку, грид выполняет несколько действий:

--
Вначале вызывается событие CellClick

Код:
procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
begin
  if Column.FieldName = 'cb' then
    Edit1.Text := Column.Field.Value
end;


в котором Column.Field.Value еще имеет текущее неизмененное значение, которое и записывается в поле Edit1.Text.

--
Затем стандартный метод обработчик Клика видит, что поле имеет тип Checkbox и записывает в поле Column.Field.Value второе значение для логического поля.
Грид перерисовывается и отображается новое значение поля.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 21 окт 2021, 14:43 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
Спасибо. Я так и думал. Но как мне после клика получить новое значение - то значение, которое видит пользователь?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 22 окт 2021, 09:40 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
EhLibSupport писал(а):
Если у вас есть ощущение того, что DataSet содержит значение поля, отличное от того, которое показывается в колонке грида с CheckBox'ом, то присылайте Демо проект. Будем разбираться.


Вложения:
CheckBox.zip [4.74 KiB]
Скачиваний: 58
CheckBox.gif
CheckBox.gif [ 185.81 KiB | Просмотров: 1038 ]
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 22 окт 2021, 16:17 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Если в предыдущем сообщении во хотите задать вопрос.
Почему после нажатия на ячейку с чекбоксом и затем на заголовок состояние чекбокса сбрасывается, то ответ такой.
В методе DBGridEh1TitleClick перед сортировкой необходимо проверять, что DataSet находится в состоянии dsEdit и постить редактирование.

Код:
procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
  if (dsEdit = MemTableEh1.State) then
    MemTableEh1.Post;

  SortColumn (Column, MemTableEh1);
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 23 окт 2021, 11:41 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
Ок. А так?
Нужно переделать старый проект и хотелось бы заменить самописный грид на DBGridEh, который будет красивой прослойкой. Чтобы изменить данные в своих структурах нужно сначала сделать MemTableEh.Post или как-то получить правильное значение CheckBox'a. Как мне после клика сделать MemTableEh.Post, чтобы это работало?


Вложения:
CheckBox2(1).gif
CheckBox2(1).gif [ 195.6 KiB | Просмотров: 1000 ]
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 23 окт 2021, 23:30 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Чтобы отловить момент изменения поля, можно использовать событие TDataSource.OnDataChange
Для поля ‘cb’ обработчик события будет выглядеть следующим образом.

Код:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if (Field = MemTableEh1.FieldByName('cb')) then
  begin
    if (Field.AsBoolean = True) then
      Edit1.Text := 'True'
    else
      Edit1.Text := 'False'
  end;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Значение CheckBox до Post
СообщениеДобавлено: 23 окт 2021, 23:40 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Чтобы отловить изменение поля, когда новое значение записывается именно из ячейки грида,
необходимо создать Persistent колонки в гриде и использовать событие колонки TColumnEh.OnUpdateData.
В этом же событии можно вызывать DataSet.Post

Код:
procedure TForm1.DBGridEh1Columns0UpdateData(Sender: TObject; var Text: string;
  var Value: Variant; var UseText, Handled: Boolean);
begin
  TColumnEh(Sender).Field.Value := Value;
  TColumnEh(Sender).Field.DataSet.Post;
  Handled := True;

  Edit1.Text := TColumnEh(Sender).Field.AsString;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB