カスタムモデルを新規作成する場合は、シートモデルのタイプのそれぞれをテンプレートとして使用できます。カスタムモデルを作成するするには、以下のいずれかの方法があります。
- モデルタイプ別のインタフェースクラスを実装するクラスを作成します。
- モデルタイプ別のデフォルトクラスを継承したクラスを作成します。デフォルトクラスには、必要なインタフェースがすべて実装されているため、これが最も簡単な方法です。
- モデルタイプ別の基本クラスを継承したクラスを作成します
たとえば、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
関連トピック