GrapeCity SPREAD for Windows Forms 11.0J > 開発者ガイド > シートモデル > シートモデルのタイプ > Data モデル |
Dataモデルは、セルの値や数式、タグやセルノートといったセル内の情報を保持します。他にも、データ連結されたシートのデータソースに関するプロパティなど、セルの内容に関するすべてが含まれます。
コントロールの処理において何らかのカスタマイズを行う場合、その対象となるのは、多くの場合はDataモデルです。Dataモデルは他のどのモデルよりも多くのインタフェースを実装し、多くの機能を備えています。Dataモデルを形成するクラスは以下のとおりです。
基本クラス | BaseSheetDataModelクラス |
---|---|
デフォルトクラス | DefaultSheetDataModelクラス |
インタフェース | ISheetDataModelインタフェース |
シートのDataモデルを参照するには、SheetViewクラスのModelsプロパティでSheetView.DocumentModelsオブジェクトを参照し、Dataプロパティを使用します。
以下、Dataモデルについて説明します。
Dataモデルは、シートに表示されるセル値を供給するオブジェクトです。 ほとんどの場合、シートの作成時に生成される既定のデータモデルを使用するだけで十分です。
既定のデータモデルは、データソースに連結しても、しなくても(非連結)どちらでも使用できます。非連結モードでは、データモデルはセル値の2次元配列と同様に機能します。連結モードでは、データモデルはデータソースをラップし、必要に応じて、データソースが提供しない機能(セルの数式、非連結の行および列など)を提供します。
データモデルのSetModelDataColumnメソッドがAddColumnメソッドと異なる点は、データモデル内のどの列に、どのデータフィールドを連結するか指定できることです。
モデルに列を追加すると、これらの列はシートに追加されます。データモデルのGetValueおよびSetValueメソッドで指定する行および列は、シートで並べ替えが行われていない限り、シート内の行および列と同じインデックスをもちます。行や列の並び替えはコントロール上での表示に対して実行され、実際のデータモデルを並び替えるわけではありません。そのため、行や列の並び替えを実行した場合は、SheetViewクラスのGetModelRowFromViewRowおよびGetModelColumnFromViewColumnメソッドを使用して、表示上の位置をデータモデルの位置にマッピングする必要があります。
SheetViewクラスのGetValueおよびSetValueメソッドは、常にデータモデル内のデータに対して取得および設定を行います(Modelsプロパティで参照するSheetView.DocumentModelsオブジェクトのDataプロパティでデータモデルを参照し、GetValueおよびSetValueメソッドを使用した場合も同様)。一方、CellクラスのValueプロパティは、シートを保持するSpreadViewオブジェクトでセルが編集中の場合、エディタコントロールの値を返します。この値は、セルの編集モードが終了するまでデータモデルに反映されません。ただし、次のコードを使用することで、この値をデータモデルに手動で反映できます。
FpSpread1.Sheets(0).SetValue(row, column, FpSpread1.Sheets(0).Cells(row, column).Value)
IDataSourceSupportインタフェースを実装しているデータモデルをデータソースに連結すると、データモデルの連結部分は、直接データソースのデータに対して取得および設定を行います。データモデルの連結後、AddColumnsメソッドで列がデータモデルに追加された場合、追加された列に非連結列が含まれる可能性もあります(これらのデータモデルの列に対し、IDataSourceSupportインタフェースのIsColumnBoundメソッドはFalseを返します)。非連結列の値は、データソースではなく、データモデルに保管されます。
データモデルが IUnboundRowSupportインタフェースを実装している場合、非連結の行がデータモデルに含まれる可能性があります。これらの値も、データソース内ではなくデータモデル内に保管されます。これらの行を連結行にするには、IUnboundRowSupportインタフェースのAddRowToDataSourceメソッドを呼び出します。このautoFill引数をTrueに設定すると、この非連結行内の連結列のデータがデータソースの新規のレコードまたは要素に追加され、これによって非連結行が連結行に代わります。ただしこれは、データソース側でこの動作が許可されている場合に限ります。許可されていない場合は例外が発生します。
デフォルトのデータモデルであるDefaultSheetDataModelクラスは、これらのインタフェース以外にも、計算、階層表示、およびシリアル化に関する多くのオプションインタフェースを実装します。