PowerTools SPREAD for ASP.NET 8.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

関連トピック

 

 


© 2003-2015, GrapeCity inc. All rights reserved.