PowerTools SPREAD for Windows Forms 10.0J
階層表示の手動作成

階層表示を手動で(プログラミングによって)作成できます。 親は階層の上位レベルに、子は下位レベルに相当します。

サンプルコード

次の例は、親と子を表す、SheetViewクラスを継承するカスタムシートを作成し、それぞれ、次の処理を実装します。

親シート

SheetViewクラスのChildRelationCountプロパティ、GetChildViewメソッド、およびFindChildViewメソッドをオーバーライドします。 ChildRelationCountプロパティは、このシートとすべての子シート間に存在する関係の数を表します(「1」を返します)。 GetChildViewメソッドは、子シートを取得するために使用します。このメソッドはFindChildViewメソッドを呼び出し、子シートがすでに作成されているかどうかを確認します。子シートがすでに作成されている場合、すでに作成されているシートを使用し、作成されていない場合、新規シートを作成します。子シートを表すSheetViewオブジェクトのSheetNameプロパティには、割り当て先の親の行インデックスを設定します。

子シート

SheetViewクラスのParentRowIndexプロパティをオーバーライドし、子シートが割り当てられている親の行インデックスを返します。この情報は、親シートが子シートを作成した時に、子シートを表すSheetViewオブジェクトのSheetNameプロパティに設定しています。

C#
コードのコピー
private void Form1_Load(object sender, EventArgs e)
{
    fpSpread1.Sheets.Clear();
    fpSpread1.Sheets.Add(new customSheet());
    fpSpread1.Sheets[0].RowCount = 10;
    int i = 0;
    for (i = 0; i <= 9; i++)
    {
        if (i != 1)
        {
            fpSpread1.Sheets[0].SetRowExpandable(i, false);
        }
    }
}
public class customSheet : FarPoint.Win.Spread.SheetView
{
    public override int ChildRelationCount
    {
        get { return 1; }
    }
    public override FarPoint.Win.Spread.SheetView GetChildView(int row, int relationIndex)
    {
        customChild child = (customChild)FindChildView(row, 0);
        if ((child != null))
            return child;
        child = new customChild();
        child.RowCount = 5;
        child.Parent = this;
        child.SheetName = row.ToString();
        ChildViews.Add(child);
        return child;
    }
    public override FarPoint.Win.Spread.SheetView FindChildView(int row, int relationIndex)
    {
        string id = row.ToString();
        foreach (FarPoint.Win.Spread.SheetView view in ChildViews)
        {
            if (view.SheetName == id)
                return view;
        }
        return null;
    }
}
public class customChild : FarPoint.Win.Spread.SheetView
{
    public override int ParentRowIndex
    {
        get { return Convert.ToInt32(SheetName); }
    }
}
Visual Basic
コードのコピー
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    FpSpread1.Sheets.Clear()
    FpSpread1.Sheets.Add(New customSheet)
    FpSpread1.Sheets(0).RowCount = 10
    Dim i As Integer
    For i = 0 To 9
        If i <> 1 Then
            FpSpread1.Sheets(0).SetRowExpandable(i, False)
        End If
    Next i
End Sub
Public Class customSheet
    Inherits FarPoint.Win.Spread.SheetView
    Public Overrides ReadOnly Property ChildRelationCount() As Integer
        Get
            Return 1
        End Get
    End Property
    Public Overrides Function GetChildView(ByVal row As Integer, ByVal relationIndex As Integer) As FarPoint.Win.Spread.SheetView
        Dim child As customChild = CType(FindChildView(row, 0), customChild)
        If Not (child Is Nothing) Then Return child
        child = New customChild
        child.RowCount = 5
        child.Parent = Me
        child.SheetName = row.ToString
        ChildViews.Add(child)
        Return child
    End Function
    Public Overrides Function FindChildView(ByVal row As Integer, ByVal relationIndex As Integer) As FarPoint.Win.Spread.SheetView
        Dim id As String = row.ToString
        Dim View As FarPoint.Win.Spread.SheetView
        For Each View In ChildViews
            If View.SheetName = id Then Return View
        Next
        Return Nothing
    End Function
End Class
Public Class customChild
    Inherits FarPoint.Win.Spread.SheetView
    Public Overrides ReadOnly Property ParentRowIndex() As Integer
        Get
            Return CInt(SheetName)
        End Get
    End Property
End Class
関連トピック

 

 


© 2004-2017, GrapeCity inc. All rights reserved.