Delphi(FMX) Livebindings с несколькими радиокнопками

У меня есть форма с 2 RadioButtons(с тем же GroupName) и мне нужно сохранить 'A'(если выбран RadioButton1) или 'I'(если выбран RadioButton2) в поле Status с помощью LiveBindings.

От одного компонента к одному полю легко, но в этом случае у меня есть два компонента, которые получают и устанавливают значения из одного поля.

Я создал функцию, которая возвращает radiobutton выбирая через Groupname и заполните поле вручную, но я хотел что-то более автоматическое.

Заранее спасибо!

1 ответ

Решение

Вот шаги для достижения этой цели.

  1. Создайте две кнопки RadioButton RadioButton1 а также RadioButton2,
  2. Установите для их свойства GroupName одинаковую строку для обоих переключателей.
  3. Щелкните правой кнопкой мыши 1-й переключатель и выберите Bind Visually...
  4. В конструкторе LiveBindings щелкните правой кнопкой мыши переключатель и выберите Bindable Members, а затем установите флажок IsChecked с последующим нажатием кнопки ОК.
  5. Все еще в конструкторе Live Bindings, теперь перетащите ссылку между IsChecked свойство и поле, к которому вы хотите привязать (обратите внимание, это может быть строковое поле).
  6. Повторите шаги 4 и 5 для другого переключателя.

Теперь вы почти не работаете, но вам нужно преобразовать строку в логическое значение, чтобы IsChecked свойство будет иметь логическое значение. Для этого выберите ссылку привязки в конструкторе LiveBindings для своей кнопки-переключателя. Тогда в своем CustomFormat свойство, присвойте следующую строку

IfThen(ToStr(%s)="Poor",True, False)

Это позволит переключателю переключаться, когда значение базовой базы данных "Плохо"

Сделайте то же самое для других переключателей, за исключением использования другой строки

IfThen(ToStr(%s)="Excellent",True, False)

Теперь, чтобы дать переключателям возможность изменять поле основной базы данных, вам нужно будет прикрепить код для выполнения этого. Давайте использовать радио кнопки OnClick событие (прикрепить к обоим переключателям). Этот код предполагает, что ваш базовый набор данных называется FDCustomer, и ваше поле называется Status, Обратите внимание, что во время события переключатель еще не отмечен, поэтому мы ищем IsChecked быть ложным.

if Sender = RadioButton1 then
begin
   if not TRadioButton(Sender).IsChecked then // checking
   begin
     fdcustomer.Edit;
     fdcustomer.FieldByName('Status').AsString:= 'Poor';
   end;
end
else if Sender = RadioButton2 then
begin
   if not TRadioButton(Sender).IsChecked then
   begin
     fdcustomer.Edit;
     fdcustomer.FieldByName('Status').AsString:= 'Excellent';
   end;
end;
Другие вопросы по тегам