行と列を入れ替えてデータを連結したい。(VS2002/VS2003)
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
SPREADではデータモデルのデフォルト実装をDefaultSheetDataModelクラスにて提供しています。通常のデータ連結ではこの実装が使用されます。
ただデータモデルの基本的な実装についてはDefaultSheetDataModelクラスの親クラスBaseSheetDataModelクラスにて提供しています。
製品ではこのような構成にてお客様自身でデータモデルクラスを独自に実装できる自由度を取り入れています。
BaseSheetDataModelクラスのサブクラスを作成することで行と列を入れ替えたデータモデルを作成することができます。
  
メモ
下記、サンプルコードです。
【サンプル概要】
製品付属のサンプルデータベースのPRODUCTSテーブルに連結しています。
<SPREAD Install>SamplesFilesSpreadSample.mdb
新規WebフォームにてSPREAD, Button, OleDbDataAdapterを配置しただけの状態で下記サンプルコードを追加して下さい。
【VB サンプルコード】
ただデータモデルの基本的な実装については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
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