我想知道是否可以将TList对象绑定为cxGrid数据源。
所以我所拥有的是一个包含各种对象的TList对象,我不需要持久化。 我想要一种GridView作为“选定项目”的概述,并且所选项目是列表中的对象。
最好使用存储在TList中的对象类型来定义列。
这是否容易实现,如果是这样,你能够概述一下如何做到这一点。 我目前正在使用一个ListBox,它使用tabWidth作为一种列分隔符,但更愿意进行切换。
答案 0 :(得分:2)
Quantum Grid有三种不同的方式来访问数据。它可以在未绑定(直接访问单元),绑定(使用数据源的标准方式)或“提供者”模式下工作,您必须编写适当的类(提供者)来访问和修改数据。在提供者模式下,数据源可以是您喜欢的。该帮助详细说明了如何实现提供程序。这也应该是演示应用程序中的UnboundListDemo。
答案 1 :(得分:1)
假设您有一个TList派生类TMyList,它包含TMyListItem类的项。 然后,您将从TcxCustomDataSource派生。
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;
实施将是这样的:
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;
你会使用你的班级:
FTListDataSource := TTListDataSource.Create(ATList);
ThePivotGrid.DataController.CustomDataSource := FTListDataSource;
FTListDataSource.DataChanged;