PowerTools SPREAD for Windows Forms 8.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 |