MESCIUS SPREAD for ASP.NET 10.0J
階層表示

リレーショナルデータベース内のデータなどのリレーショナルデータを、階層表示することができます。コントロールに連結されているデータセットがリレーショナルデータを保持していると、SPREADは自動的に階層表示を行います。

子階層のある行ヘッダには、行を展開できる「+」「-」ボタンが表示されます。また、上位階層を折りたたんでシート上部に階層バーとして表示することも可能です。これらの動作については下記の項目で解説します。

階層表示

子階層も一つのシートとして生成されます。よって子階層でもセル型や背景色などのスタイルを設定できるほか、ページングなどのデータ操作機能を適用することも可能です。

設定方法

複数のデータテーブルを作成し、DataSet クラスRelations プロパティを使用してリレーショナルデータを保持するデータセットを作成します。作成したデータセットをSheetView クラスDataSource プロパティに設定します。

子階層が生成されると、FpSpread クラス のChildViewCreated イベント が発生します。このイベントパラメータから、子階層のシートオブジェクトを取得し、子階層シートのカスタマイズを行います。また、SheetView クラスのGetChildView メソッドを使用して子階層のシートを取得することも可能です。 

SpreadImageクラスは、ChildViewCreatedイベント内ではサポートされません。

サンプルコード

次のサンプルコードは、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       

関連トピック

階層表示

 

 


© MESCIUS inc. All rights reserved.