3

TListオブジェクトをcxGridデータソースとしてバインドできるかどうか疑問に思っています。

つまり、私が持っているのは、永続化する必要のないさまざまなオブジェクトを含むTListオブジェクトです。ある種のGridViewを「選択されたアイテム」の概要として機能させ、選択されたアイテムがリスト内のオブジェクトになるようにします。

列は、TListに格納されているオブジェクトタイプによって定義されることが望ましいでしょう。

これは簡単に実行できますか?もしそうなら、これがどのように行われるかについての概要を教えていただけますか。私は現在、一種の列区切り文字としてtabWidthを使用するListBoxを使用していますが、切り替えを希望しています。

4

2 に答える 2

3

TMyListItemクラスのアイテムを保持するTList派生クラスTMyListがあると仮定します。次に、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;
于 2012-01-15T02:14:27.487 に答える
2

クォンタムグリッドには、データにアクセスするための3つの異なる方法があります。バインドされていない(セルに直接アクセスする)、バインドされている(データソースを使用する標準的な方法)、またはデータにアクセスして変更するために適切なクラス(プロバイダー)を作成する必要がある「プロバイダー」モードで動作します。プロバイダーモードでは、データソースは好きなものにすることができます。ヘルプには、プロバイダーの実装方法の詳細が記載されています。これらは、デモアプリケーションの中でUnboundListDemoでもある必要があります。

于 2011-11-01T18:21:57.263 に答える