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;
체크 아웃 단위 cxCustomData.pas합니다. 또한이 유닛을 보면서 어떻게하는지 기본적인 아이디어를 얻을 수 있습니다 : https://code.google.com/p/delphisorcery/source/browse/trunk/Source/DevExpress/DSharp.DevExpress.PresenterDataSource.pas (this 단위도 트리에 표시하는 방법을 구현) –
링크가 https://bitbucket.org/sglienke/dsharp/src/8f22b8a5c3b3c04773fea3be6307969268df7ef4/Source/DevExpress/DSharp.DevExpress.PresenterDataSource.pas?at=master로 변경되었습니다. –