자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey fmx 에서 dataset 과 listview 나 listbox 를 소스코딩없이 연결할수있나요?
2014.06.03 07:03
예전에
TDataSet, TDatasource, TDBItem 이런 컴포넌트들이 있으면
코딩한줄없이 TDataSet 만 Open 을하면 엮여있는 DBItem 들이 쭉 표시되었습니다.
TDBGrid 가 그 예일것같습니다.
TDataSet 의 필드 갯수를 몰라도, 그 필드들의 속성을 몰라도
Open 만하면 DBItem 들은 표시가 되었습니다.
헌데 LiveBinding 이란 놈이 나오고나서부터
DBItem 들은 없어지고 그냥 Item 콤포넌트에 LiveBinding 을 엮어서 쓰더군요
요즘 모바일을 개발해볼려고 공부를 하고있는데
모바일 프로젝트는 그리드보단 listview 나 listbox 를 많이쓰는것같습니다.
그래서 저도 listview나 listbox 로 만들어보고있는데
예전방식으로 DBItem 엮듯이 LiveBinding 을 엮으면
Text 혹은 Detail 속성에만 필드 값들을 줄수있더군요
만약 DataSet의 필드가 10개라면
이걸 모두 표시해줄려면 StyleBook의 TListBoxItem 스타일을 편집하고
TListBoxItem을 동적으로 생성해서
var
Item : TListBoxItem;
begin
with ClientDataSet1 do begin
First;
while not eof do begin
Item := TListBoxItem.Create(ListBox1);
Item.Parent := ListBox1;
Item.StyleLookup := 'listboxitemstyle';
Item.StylesData['Text'] := FieldByName('Category').AsString;
Item.StylesData['SubText'] := FieldByName('Species Name').AsString;
Item.StylesData['SubText2'] := FieldByName('Common_Name').AsString;
Item.StylesData['SubText3'] := FieldByName('Length (cm)').AsString;
Next;
end;
end;
end;
대충 이렇게하면 여러개의 필드도 제 입맛대로 보여줄수는 있었습니다.
하지만 DataSet 이라는게
필드의 값이 바뀐다면
엮여있는 모든 DBItem 들이 소스코드 한줄없이 수정된 일괄 값들이 보여져야
쓰는 맛이있을텐데말이지요
위방법처럼 하면 DataSet 필드값에 수정이일어나면
제가 가서 일일이 코딩해주어야 할것같은데 말입니다.
예전방식처럼 DBItem 엮듯이 LiveBinding 으로 제가 임의적으로 수정한 Layout 을 가진
TListview 나 TListBox에 소스코드 한줄없이 엮을수가 있을까요?
Firemonkey fmx 에서 dataset 과 listview 나 listbox 를 소스코딩없이 연결할수있나요?
2014.06.03 07:03
예전에
TDataSet, TDatasource, TDBItem 이런 컴포넌트들이 있으면
코딩한줄없이 TDataSet 만 Open 을하면 엮여있는 DBItem 들이 쭉 표시되었습니다.
TDBGrid 가 그 예일것같습니다.
TDataSet 의 필드 갯수를 몰라도, 그 필드들의 속성을 몰라도
Open 만하면 DBItem 들은 표시가 되었습니다.
헌데 LiveBinding 이란 놈이 나오고나서부터
DBItem 들은 없어지고 그냥 Item 콤포넌트에 LiveBinding 을 엮어서 쓰더군요
요즘 모바일을 개발해볼려고 공부를 하고있는데
모바일 프로젝트는 그리드보단 listview 나 listbox 를 많이쓰는것같습니다.
그래서 저도 listview나 listbox 로 만들어보고있는데
예전방식으로 DBItem 엮듯이 LiveBinding 을 엮으면
Text 혹은 Detail 속성에만 필드 값들을 줄수있더군요
만약 DataSet의 필드가 10개라면
이걸 모두 표시해줄려면 StyleBook의 TListBoxItem 스타일을 편집하고
TListBoxItem을 동적으로 생성해서
var
Item : TListBoxItem;
begin
with ClientDataSet1 do begin
First;
while not eof do begin
Item := TListBoxItem.Create(ListBox1);
Item.Parent := ListBox1;
Item.StyleLookup := 'listboxitemstyle';
Item.StylesData['Text'] := FieldByName('Category').AsString;
Item.StylesData['SubText'] := FieldByName('Species Name').AsString;
Item.StylesData['SubText2'] := FieldByName('Common_Name').AsString;
Item.StylesData['SubText3'] := FieldByName('Length (cm)').AsString;
Next;
end;
end;
end;
대충 이렇게하면 여러개의 필드도 제 입맛대로 보여줄수는 있었습니다.
하지만 DataSet 이라는게
필드의 값이 바뀐다면
엮여있는 모든 DBItem 들이 소스코드 한줄없이 수정된 일괄 값들이 보여져야
쓰는 맛이있을텐데말이지요
위방법처럼 하면 DataSet 필드값에 수정이일어나면
제가 가서 일일이 코딩해주어야 할것같은데 말입니다.
예전방식처럼 DBItem 엮듯이 LiveBinding 으로 제가 임의적으로 수정한 Layout 을 가진
TListview 나 TListBox에 소스코드 한줄없이 엮을수가 있을까요?
모바일에서
원하시는 기능을 이용하시려면 TStringGrid를 이용하실 수 있습니다.
하지만,
모바일에서 TListView, TListBox를 제공하는 이유는
모바일 UX 상 한화면에 많은 정보를 표시하는 것이 효과적이지 못해서 입니다.
작은 화면에 많은 내용을 표시하려면 스크롤이 생기는 등 터치로 제어가 힘들어 집니다.
위 이유로 리스트 형태의 UI가 많이 사용됩니다.
힌트를 드리면
리스트에서 항목을 누르면 상세화면으로 이동하는 방식을
TabControl을 이용하시면 도움이 되실 것 같습니다.
리스트와 상세화면의 컨트롤(TEdit, TComboBox, TSwitch)들을 LiveBinding으로 연결하시면
원하시는 UI를 더욱 모바일답게 구성하실 수 있습니다.
아래 링크를 참고하시면 라이브바인딩과 탭컨트롤을 이해하시는데 도움이 될것같습니다.
http://docwiki.embarcadero.com/RADStudio/XE6/en/LiveBindings_in_RAD_Studio
http://docwiki.embarcadero.com/RADStudio/XE6/en/Mobile_Tutorial:_Using_Tab_Components_to_Display_Pages_(iOS_and_Android)