MESCIUS SPREAD for ASP.NET 10.0J > 開発者の手引き > シートモデル > カスタムシートモデルの作成 |
カスタムモデルを新規作成する場合は、シートモデルのタイプのそれぞれをテンプレートとして使用できます。カスタムモデルを作成するするには、以下のいずれかの方法があります。
たとえば、Data モデルをカスタマイズしたカスタムデータモデルは、ISheetDataModel インタフェースを実装するクラスを作成します。
他のオプションインタフェースが特に必要ない場合は、ここで必要となるのはISheetDataModel インタフェースだけとなります。他のインタフェースの詳細については、「オプションインタフェース」を参照してください。
Data モデルのデフォルトクラス(DefaultSheetDataModel クラス)ででは、オプションインタフェースはすでに実装されています。
Data モデルの基本クラス(BaseSheetDataModel クラス)には、Changedイベントが実装されています。このため、特にこのイベントの実装を提供する必要はありません。このイベント自体は、BaseSheetDataModel クラスにおいて唯一仮想ではない要素です。
パフォーマンス上の理由から、カスタムデータモデルを独自に作成しなければならない場合、たとえば100 万行および 10 列から成る大きな表に、計算値(たとえば加算値または乗算値)を表示する場合について考えます。 デフォルトのData モデルを使用する場合は、この 1,000 万の値をすべて計算および格納する必要があり、これには膨大なメモリと時間が消費されます。
次のサンプルコードは、この問題を回避するカスタムデータモデルの例です。Data モデルの基本クラスを継承しています。
public class Page1 : System.Web.UI.Page { protected void Page_Load(object sender, System.EventArgs e) { if (IsPostBack) return; FpSpread1.ActiveSheetView.DataModel = new ComputedDataModel(); } } [Serializable()] class ComputedDataModel : FarPoint.Web.Spread.Model.BaseSheetDataModel { public override int RowCount { get { return 1000000; } } public override int ColumnCount { get { return 10; } } public override object GetValue(int row, int column) { return row + column; } }
Class Page1 Inherits System.Web.UI.Page Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If IsPostBack Then Return End If FpSpread1.ActiveSheetView.DataModel = New ComputedDataModel() End Sub End Class <Serializable()> _ Class ComputedDataModel Inherits FarPoint.Web.Spread.Model.BaseSheetDataModel Public Overrides Property RowCount As Integer Get Return 1000000 End Get Set(value As Integer) MyBase.RowCount = value End Set End Property Public Overrides Property ColumnCount As Integer Get Return 10 End Get Set(value As Integer) MyBase.ColumnCount = value End Set End Property Public Overrides Function GetValue(row As Integer, column As Integer) As Object Return row + column End Function End Class