2011-11-01 8 views
3

TList 객체를 cxGrid 데이터 소스로 바인딩 할 수 있는지 궁금합니다.tcxGrid TList를 DataSource로 사용하기

그래서 내가 가지고있는 것은 내가 유지할 필요가없는 다양한 개체를 포함하는 TList 개체입니다. "일종의 GridView가"선택한 항목 "의 개요 역할을하고 선택한 항목이 목록의 개체가되고 싶습니다.

TList에 저장된 오브젝트 유형으로 C 럼을 정의하는 것이 Y 람직합니다.

이 방법을 쉽게 사용할 수 있습니까? 그렇다면이 방법에 대한 개요를 나에게 줄 수 있습니다. 현재 tabWidth를 일종의 열 분리 자로 사용하지만 전환을 선호하는 ListBox를 사용하고 있습니다.

+1

체크 아웃 단위 cxCustomData.pas합니다. 또한이 유닛을 보면서 어떻게하는지 기본적인 아이디어를 얻을 수 있습니다 : https://code.google.com/p/delphisorcery/source/browse/trunk/Source/DevExpress/DSharp.DevExpress.PresenterDataSource.pas (this 단위도 트리에 표시하는 방법을 구현) –

+0

링크가 https://bitbucket.org/sglienke/dsharp/src/8f22b8a5c3b3c04773fea3be6307969268df7ef4/Source/DevExpress/DSharp.DevExpress.PresenterDataSource.pas?at=master로 변경되었습니다. –

답변

2

퀀텀 그리드는 세 가지 방법으로 데이터에 액세스 할 수 있습니다. 데이터를 액세스하고 수정하기 위해 적절한 클래스 (제공자)를 작성해야하는 언 바운드 (셀에 직접 액세스), 바운드 (데이터 소스를 사용하는 표준 방법) 또는 "공급자"모드에서 작동 할 수 있습니다. 공급자 모드에서는 데이터 원본을 원하는대로 지정할 수 있습니다. 도움말에서는 공급자를 구현하는 방법에 대해 자세히 설명합니다. 데모 애플리케이션 중에서도 UnboundListDemo 여야합니다.

1

TMyListItem 클래스의 항목을 포함하는 TList 파생 클래스 TMyList가 있다고 가정 해 보겠습니다. 그러면 TcxCustomDataSource에서 파생됩니다.

constructor TTListDataSource.Create(ATList : TMyList); 
begin 
    inherited Create; 
    FTList := ATList; 
end; 

function TTListDataSource.GetRecordCount: Integer; 
begin 
    result := FTList.Count; 
end; 

function TTListDataSource.GetValue(ARecordHandle: TcxDataRecordHandle; 
            AItemHandle: TcxDataItemHandle): Variant; 
var 
    aIndex   : Integer; 
    aMyListItem : TMyListItem; 
begin 
    aCurrentIndex := Integer(ARecordHandle); 
    if (aCurrentIndex > -1) and (aCurrentIndex < FTList.Count) then begin 
     aMyListItem := FTList[aCurrentIndex)] as TMyListItem; 
     aIndex   := Integer(AItemHandle); 
     case aIndex of 
     0     : result := ''; 
     1     : result := aMyListItem.Year; 
     2     : result := aMyListItem.Quarter; 
     end 
     else 
     result := ''; 
end; 

그리고 당신은 당신의 클래스를 사용합니다 :

TTListDataSource = class(TcxCustomDataSource) 
     private 
      FTList : TMyList; 
     protected 
      function GetRecordCount: Integer; override; 
      function GetValue(ARecordHandle: TcxDataRecordHandle; AItemHandle: TcxDataItemHandle): Variant; override; 
     public 
      constructor Create(ATList : TMyList); 
    end; 

구현은 다음과 같이 될 것이다

FTListDataSource := TTListDataSource.Create(ATList); 
    ThePivotGrid.DataController.CustomDataSource := FTListDataSource; 
    FTListDataSource.DataChanged;