带有多个RadioButton的Delphi(FMX)Livebindings

时间:2016-03-10 18:55:25

标签: delphi radio-button firemonkey livebindings

我有一个2 RadioButtons(具有相同的GroupName)的表单,我需要在字段Status中保存'A'(如果选择了RadioButton1)或'I'(如果选择了RadioButton2)使用LiveBindings。

一个组件到一个字段很容易,但在这种情况下,我有两个组件从一个字段获取和设置值。

我创建了一个函数,通过radiobutton返回Groupname选择并手动填充字段,但我想要更自动的东西。

先谢谢!

1 个答案:

答案 0 :(得分:2)

以下是完成此任务的步骤。

  1. 创建两个RadioButtons,将其称为RadioButton1RadioButton2
  2. 将两个单选按钮的GroupName属性设置为相同的字符串。
  3. 右键单击第一个单选按钮,然后选择“直观绑定...”
  4. 在LiveBindings设计器中,右键单击您的单选按钮并选择Bindable Members,然后选中复选框IsChecked,然后单击确定按钮。
  5. 仍在Live Bindings设计器中,现在拖动IsChecked属性与您要绑定的字段之间的链接(请注意,这可以是字符串字段)。
  6. 对另一个单选按钮重复步骤4和5。
  7. 现在你几乎失败了,但是你需要将字符串转换为布尔值,以便IsChecked属性具有布尔值。为此,请从LiveBindings Designer中为单选按钮选择绑定链接。然后在其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;