2014-05-17 3 views
4

LiveBindings를 사용하여 TLookupComboBox과 같은 것을 만들려고합니다.코드에서 ComboBox의 SelectedValue를 가져 오는 방법은 무엇입니까?

VCL 양식에 보통 TComboBox을 삽입했습니다. 또한 두 개의 필드가 idtext 인 행이있는 데이터 세트가 있습니다.

그런 다음 LiveBindings 편집기를 사용하여 TBindSourceDBTBindingsList을 생성했습니다.

는 하나 그것은 구속력이있다 :

object BindingsList1: TBindingsList 
    Methods = <> 
    OutputConverters = <> 
    UseAppManager = True 
    Left = 244 
    Top = 229 
    object LinkFillControlToField1: TLinkFillControlToField 
    Category = 'Quick Bindings' 
    Control = ComboBox1 
    Track = True 
    FillDataSource = BindSourceDB1 
    FillValueFieldName = 'id' 
    FillDisplayFieldName = 'text' 
    AutoFill = True 
    BufferCount = -1 
    FillExpressions = <> 
    end 
end 

당신이 볼 수 있듯이 나는 FillValueFieldNameFillDisplayFieldName에 대한 다양한 분야가 있습니다.

LiveBindings 디자이너는 다음과 같습니다

BindSourceDB1 connected to ComboBox1

콤보 상자는 필드 text의 값으로 채워, 그래서 내가 올바르게 설정 생각한다.

코드에서 SelectedValue을 얻으려면 어떻게해야합니까?

시각적으로이 값을 TLabel에 바인딩 한 다음 TLabel.Caption을 읽을 수는 있지만 더 쉬운 방법이 있을까요?

추신 : 나는 DB에 값을 저장하고 싶지 않습니다. 그렇지 않으면 TDBLookupComboBox을 사용합니다.

편집 :TPrototypeBindSource을 사용해 보았습니다 만 코드에서 필드에 액세스하는 분명한 방법이 없습니다. 나는 또한 TClientDataSet과 함께 두 번째 TBindSourceDB을 사용하려고 시도했지만, 너트를 깨기 위해 슬레지 해머를 사용하는 것과 같은 느낌이 들었다.

답변

1

당신은 해당 TLinkFillControlToField를 통해 선택된 값에 액세스 할 수 있습니다 :

procedure TForm1.ComboBox1Change(Sender: TObject); 
var 
    SelectedValue: Integer; 
begin 
    if TryStrToInt(LinkFillControlToField1.BindList.GetSelectedValue.AsString, SelectedValue) then 
     DoSomethingWith(SelectedValue); 
end; 
그런 다음 아래 코드를 작성
0

어쩌면 당신을 도울 수 있습니다. selectedIndex이라는 전역 변수를 추가 한 다음 콤보 상자를 두 번 클릭하면됩니다. ComboBoxChange 이벤트가 나타납니다.

selectedIndex := combobox1.ItemIndex; 
관련 문제