行と列を入れ替えてデータを連結したい。(VS2002/VS2003)

文書番号 : 21824     文書種別 : 使用方法     最終更新日 : 2006/06/30
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
SPREADではデータモデルのデフォルト実装をDefaultSheetDataModelクラスにて提供しています。通常のデータ連結ではこの実装が使用されます。
ただデータモデルの基本的な実装についてはDefaultSheetDataModelクラスの親クラスBaseSheetDataModelクラスにて提供しています。
製品ではこのような構成にてお客様自身でデータモデルクラスを独自に実装できる自由度を取り入れています。

BaseSheetDataModelクラスのサブクラスを作成することで行と列を入れ替えたデータモデルを作成することができます。

  メモメモ
  • 既存クラスの継承は.NETアプリケーション開発における一般的な手法です。継承方法の詳細についてはMSDNライブラリをご参照ください。(既存クラスのカスタマイズ方法については弊社サポートサービス対象外となります)

下記、サンプルコードです。

【サンプル概要】

製品付属のサンプルデータベースのPRODUCTSテーブルに連結しています。

 <SPREAD Install>SamplesFilesSpreadSample.mdb

新規WebフォームにてSPREAD, Button, OleDbDataAdapterを配置しただけの状態で下記サンプルコードを追加して下さい。

【VB サンプルコード】
-----------------------------------------
  Webフォームクラス
-----------------------------------------
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If IsPostBack Then
      Return
    End If

    Dim ds As New DataSet
    OleDbDataAdapter1.Fill(ds)
    ''SPREADにデータを連結
    FpSpread1.ActiveSheetView.DataModel = New MyModel(ds, Nothing)

  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ''データベースへの更新処理
    FpSpread1.SaveChanges()
    Dim model As MyModel = CType(FpSpread1.ActiveSheetView.DataModel, MyModel)
    Dim ds As DataSet = model.GetDataSet()
    OleDbDataAdapter1.Update(ds)
  End Sub

-----------------------------------------
  カスタムデータモデルクラス
-----------------------------------------
<Serializable()> Public Class MyModel
  ''カスタムデータモデルを作成します。
  Inherits FarPoint.Web.Spread.Model.BaseSheetDataModel

  Private dataset As Data.DataSet = Nothing
  Private datamember As String = String.Empty
  Private rCount As Integer = 0

  Public Sub New(ByVal ds As Data.DataSet, ByVal dm As String)
    dataset = ds
    datamember = dm
  End Sub

  Public Overrides Function GetValue(ByVal row As Integer, ByVal col As Integer) As Object
    ''任意のセルに値を返します。
    Dim dt As Data.DataTable = Me.GetDataTable()
    If dt Is Nothing Then
      Return Nothing
    Else
      Return dt.Rows(col).Item(row)
    End If
  End Function

  Public Overrides Sub SetValue(ByVal row As Integer, ByVal col As Integer, ByVal val As Object)
    ''行と列を入れ替えてデータセットにデータを設定します。
    Dim dt As Data.DataTable = Me.GetDataTable()
    If Not (dt Is Nothing) Then
      dt.Rows(col).Item(row) = val
    End If
  End Sub

  Public Function GetDataSet() As dataset
    ''行と列を入れ替えてSPREADにデータを設定します。
    If dataset Is Nothing Then
      Return Nothing
    Else
      Return dataset
    End If
  End Function

  Public Function GetDataTable() As Data.DataTable
    ''接続しているデータテーブルを返します。
    If dataset Is Nothing Then
      Return Nothing
    Else
      If datamember Is Nothing Or datamember = String.Empty Then
        Return dataset.Tables(0)
      Else
        Return dataset.Tables(datamember)
      End If
    End If
  End Function

  Public Overrides Property RowCount() As Integer
    ''SPREADの行数を設定または取得します。
    Get
      Dim dt As Data.DataTable = GetDataTable()
      If (dt Is Nothing) Then
        Return 0
      Else
        Return dt.Columns.Count
      End If
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property

  Public Overrides Property ColumnCount() As Integer
    ''SPREADの列数を設定または取得します。
    Get
      Dim dt As Data.DataTable = GetDataTable()
      If (dt Is Nothing) Then
        Return 0
      Else
        Return dt.Rows.Count
      End If
    End Get
    Set(ByVal Value As Integer)
    End Set
  End Property

  Public Overrides Function IsEditable(ByVal row As Integer, ByVal col As Integer) As Boolean
    Return True
  End Function

End Class

関連情報
キーワード
外観 データ連結

この文書は、以前は次のFAQ IDで公開されていました : 9148