使用TList作为DataSource的tcxGrid

时间:2011-11-01 17:03:02

标签: delphi delphi-2007 vcl tcxgrid tlist

我想知道是否可以将TList对象绑定为cxGrid数据源。

所以我所拥有的是一个包含各种对象的TList对象,我不需要持久化。 我想要一种GridView作为“选定项目”的概述,并且所选项目是列表中的对象。

最好使用存储在TList中的对象类型来定义列。

这是否容易实现,如果是这样,你能够概述一下如何做到这一点。 我目前正在使用一个ListBox,它使用tabWidth作为一种列分隔符,但更愿意进行切换。

2 个答案:

答案 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;