PowerTools SPREAD for ASP.NET 8.0J > 開発者の手引き > データ連結 > 階層表示 |
リレーショナルデータベース内のデータなどのリレーショナルデータを、階層表示することができます。コントロールに連結されているデータセットがリレーショナルデータを保持していると、SPREADは自動的に階層表示を行います。
子階層のある行ヘッダには、行を展開できる「+」「-」ボタンが表示されます。また、上位階層を折りたたんでシート上部に階層バーとして表示することも可能です。これらの動作については下記の項目で解説します。
子階層も一つのシートとして生成されます。よって子階層でもセル型や背景色などのスタイルを設定できるほか、ページングなどのデータ操作機能を適用することも可能です。
複数のデータテーブルを作成し、DataSet クラスのRelations プロパティを使用してリレーショナルデータを保持するデータセットを作成します。作成したデータセットをSheetView クラスのDataSource プロパティに設定します。
子階層が生成されると、FpSpread クラス のChildViewCreated イベント が発生します。このイベントパラメータから、子階層のシートオブジェクトを取得し、子階層シートのカスタマイズを行います。また、SheetView クラスのGetChildView メソッドを使用して子階層のシートを取得することも可能です。
次のサンプルコードは、SPREADコントロールをリレーションの定義された2つのテーブルを保持するデータセットに連結します。子階層では、ページングを許可します。
using System.Data.OleDb; using System.Data; protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; // データを設定します。 OleDbConnection con = new OleDbConnection(); OleDbCommand cmd = new OleDbCommand(); OleDbDataAdapter da = new OleDbDataAdapter(); DataSet ds = new DataSet(); con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\databind\\databind.mdb"; con.Open(); cmd.Connection = con; cmd.CommandType = CommandType.TableDirect; cmd.CommandText = "Category"; da.SelectCommand = cmd; da.Fill(ds, "Category"); cmd.CommandText = "Products"; da.SelectCommand = cmd; da.Fill(ds, "Products"); // 二つのテーブルのリレーションを作成します。 ds.Relations.Add("ret", ds.Tables["Category"].Columns["catid"], ds.Tables["Products"].Columns["Category"]); // データをSpreadコントロールに連結します。 FpSpread1.DataSource = ds; } protected void FpSpread1_ChildViewCreated(object sender, FarPoint.Web.Spread.CreateChildViewEventArgs e) { // 子階層にページングを設定します。 e.SheetView.AllowPage = true; e.SheetView.PageSize = 5; e.Pager.Mode = FarPoint.Web.Spread.PagerMode.Both; // 行ヘッダを非表示にします。 e.SheetView.RowHeader.Visible = false; // 不要なセルを非表示にしたり、幅やセル型などを設定します。 e.SheetView.Columns[0].Visible = false; e.SheetView.Columns[4].Visible = false; e.SheetView.Columns[6].Visible = false; e.SheetView.Columns[1].Width = 150; e.SheetView.DataAutoCellTypes = false; e.SheetView.Columns[5].CellType = new FarPoint.Web.Spread.CurrencyCellType(); }
Imports System.Data.OleDb Imports System.Data Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack Then Return ' データを設定します。 Dim con As New OleDbConnection Dim cmd As New OleDbCommand Dim da As New OleDbDataAdapter Dim ds As New DataSet con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\databind\databind.mdb" con.Open() With cmd .Connection = con .CommandType = CommandType.TableDirect .CommandText = "Category" End With da.SelectCommand = cmd da.Fill(ds, "Category") cmd.CommandText = "Products" da.SelectCommand = cmd da.Fill(ds, "Products") ' 二つのテーブルのリレーションを作成します。 ds.Relations.Add("ret", ds.Tables("Category").Columns("catid"), ds.Tables("Products").Columns("Category")) ' データをSpreadコントロールに連結します。 FpSpread1.DataSource = ds End Sub Protected Sub FpSpread1_ChildViewCreated(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.CreateChildViewEventArgs) Handles FpSpread1.ChildViewCreated With e.SheetView ' 子階層にページングを設定します。 .AllowPage = True .PageSize = 5 e.Pager.Mode = FarPoint.Web.Spread.PagerMode.Both ' 行ヘッダを非表示にします。 .RowHeader.Visible = False ' 不要なセルを非表示にしたり、幅やセル型などを設定します。 .Columns(0).Visible = False .Columns(4).Visible = False .Columns(6).Visible = False .Columns(1).Width = 150 .DataAutoCellTypes = False .Columns(5).CellType = New FarPoint.Web.Spread.CurrencyCellType End With End Sub