【階層】コードで階層を展開して表示したい

文書番号 : 26005     文書種別 : 使用方法     最終更新日 : 2008/07/11
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
SheetView クラスのExpandRow メソッドにて、階層の展開または折りたたみができます。
また、SheetView クラスのGetChildView メソッドにて子階層のSheetViewを取得することができ、これにより孫階層の展開または折りたたみができます。

◎サンプルコード(VB)
Dim myDataSet As New Data.DataSet

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Page.IsPostBack Then
    Return
  End If

  ' サンプルで使用するデータを作成
  InitData()
  ' Spreadの初期設定
  InitSpread()
End Sub

Sub InitData()
  Dim fpParent As Data.DataTable
  Dim fpChild As Data.DataTable
  Dim fpgrandchild As Data.DataTable

  fpParent = myDataSet.Tables.Add("親")
  fpParent.Columns.AddRange(New Data.DataColumn() {New Data.DataColumn("A", Type.GetType("System.String")), New Data.DataColumn("B", Type.GetType("System.String")), New Data.DataColumn("C", Type.GetType("System.String"))})
  fpParent.Rows.Add(New Object() {"親A1", "親B1", "0"})
  fpParent.Rows.Add(New Object() {"親A2", "親B2", "1"})

  fpChild = myDataSet.Tables.Add("子")
  fpChild.Columns.AddRange(New Data.DataColumn() {New Data.DataColumn("A", Type.GetType("System.String")), New Data.DataColumn("B", Type.GetType("System.String")), New Data.DataColumn("C", Type.GetType("System.String")), New Data.DataColumn("D", Type.GetType("System.String"))})

  fpChild.Rows.Add(New Object() {"子A1-A1", "子A1-B1", "0", "0-0"})
  fpChild.Rows.Add(New Object() {"子A1-A2", "子A1-B2", "0", "0-1"})
  fpChild.Rows.Add(New Object() {"子A2-A1", "子A2-B1", "1", "1-0"})
  fpChild.Rows.Add(New Object() {"子A2-A2", "子A2-B2", "1", "1-1"})

  fpgrandchild = myDataSet.Tables.Add("孫")
  fpgrandchild.Columns.AddRange(New Data.DataColumn() {New Data.DataColumn("A", Type.GetType("System.String")), New Data.DataColumn("B", Type.GetType("System.String")), New Data.DataColumn("C", Type.GetType("System.String"))})

  fpgrandchild.Rows.Add(New Object() {"孫A1-A1-A1", "孫A1-A1-B1", "0-0"})
  fpgrandchild.Rows.Add(New Object() {"孫A1-A2-A1", "子A1-A2-B1", "0-1"})
  fpgrandchild.Rows.Add(New Object() {"孫A2-A1-A1", "孫A2-A1-B1", "1-0"})
  fpgrandchild.Rows.Add(New Object() {"孫A2-A2-A1", "孫A2-A2-B1", "1-1"})

  ' リレーションシップを設定
  myDataSet.Relations.Add("階層1", fpParent.Columns("C"), fpChild.Columns("C"))
  myDataSet.Relations.Add("階層2", fpChild.Columns("D"), fpgrandchild.Columns("C"))
End Sub

Sub InitSpread()
  Dim i As Integer
  Dim j As Integer

  ' 子階層のSheetViewオブジェクト
  Dim cv1 As FarPoint.Web.Spread.SheetView

  ' シートの階層表示
  FpSpread1.HierarchicalView = True

  FpSpread1.ActiveSheetView.DataSource = myDataSet
  FpSpread1.ActiveSheetView.DataMember = "親"

  FpSpread1.ActiveSheetView.Columns(2).Visible = False

  For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
    ' 階層を展開して表示
    FpSpread1.ActiveSheetView.ExpandRow(i, True)

    ' 各親行に関連する子階層のSheetViewオブジェクトを取得
    cv1 = FpSpread1.ActiveSheetView.GetChildView(i, 0)
    If Not (cv1.RowCount = 0) Then
      For j = 0 To cv1.RowCount - 1
        ' 階層を展開して表示
        cv1.ExpandRow(j, True)
      Next
    End If
  Next
End Sub

Private Sub FpSpread1_ChildViewCreated(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.CreateChildViewEventArgs) Handles FpSpread1.ChildViewCreated
  Select Case e.SheetView.RelationName
    Case "階層1"
      e.SheetView.Columns(2).Visible = False
      e.SheetView.Columns(3).Visible = False

    Case "階層2"
      e.SheetView.Columns(2).Visible = False
  End Select
End Sub

◎サンプルコード(C#)
System.Data.DataSet myDataSet = new System.Data.DataSet();

protected void Page_Load(object sender, EventArgs e)
{
  if (IsPostBack)
  {
    return;
  }

  // サンプルで使用するデータを作成
  InitData();
  // Spreadの初期設定
  InitSpread();
}

public void InitData()
{
  System.Data.DataTable fpParent;
  System.Data.DataTable fpChild;
  System.Data.DataTable fpgrandchild;

  fpParent = myDataSet.Tables.Add("親");
  fpParent.Columns.AddRange(new System.Data.DataColumn[] { new System.Data.DataColumn("A", Type.GetType("System.String")), new System.Data.DataColumn("B", Type.GetType("System.String")), new System.Data.DataColumn("C", Type.GetType("System.String")) });
  fpParent.Rows.Add(new object[] { "親A1", "親B1", "0" });
  fpParent.Rows.Add(new object[] { "親A2", "親B2", "1" });

  fpChild = myDataSet.Tables.Add("子");
  fpChild.Columns.AddRange(new System.Data.DataColumn[] { new System.Data.DataColumn("A", Type.GetType("System.String")), new System.Data.DataColumn("B", Type.GetType("System.String")), new System.Data.DataColumn("C", Type.GetType("System.String")), new System.Data.DataColumn("D", Type.GetType("System.String")) });

  fpChild.Rows.Add(new object[] { "子A1-A1", "子A1-B1", "0", "0-0" });
  fpChild.Rows.Add(new object[] { "子A1-A2", "子A1-B2", "0", "0-1" });
  fpChild.Rows.Add(new object[] { "子A2-A1", "子A2-B1", "1", "1-0" });
  fpChild.Rows.Add(new object[] { "子A2-A2", "子A2-B2", "1", "1-1" });

  fpgrandchild = myDataSet.Tables.Add("孫");
  fpgrandchild.Columns.AddRange(new System.Data.DataColumn[] { new System.Data.DataColumn("A", Type.GetType("System.String")), new System.Data.DataColumn("B", Type.GetType("System.String")), new System.Data.DataColumn("C", Type.GetType("System.String")) });

  fpgrandchild.Rows.Add(new object[] { "孫A1-A1-A1", "孫A1-A1-B1", "0-0" });
  fpgrandchild.Rows.Add(new object[] { "孫A1-A2-A1", "子A1-A2-B1", "0-1" });
  fpgrandchild.Rows.Add(new object[] { "孫A2-A1-A1", "孫A2-A1-B1", "1-0" });
  fpgrandchild.Rows.Add(new object[] { "孫A2-A2-A1", "孫A2-A2-B1", "1-1" });

  // リレーションシップを設定
  myDataSet.Relations.Add("階層1", fpParent.Columns["C"], fpChild.Columns["C"]);
  myDataSet.Relations.Add("階層2", fpChild.Columns["D"], fpgrandchild.Columns["C"]);
}

public void InitSpread()
{
  int i;
  int j;

  // 子階層のSheetViewオブジェクト
  FarPoint.Web.Spread.SheetView cv1;

  // シートの階層表示
  FpSpread1.HierarchicalView = true;

  FpSpread1.ActiveSheetView.DataSource = myDataSet;
  FpSpread1.ActiveSheetView.DataMember = "親";

  FpSpread1.ActiveSheetView.Columns[2].Visible = false;

  for (i = 0; i <= FpSpread1.ActiveSheetView.RowCount - 1; i++)
  {
    // 階層を展開して表示
    FpSpread1.ActiveSheetView.ExpandRow(i, true);

    // 各親行に関連する子階層のSheetViewオブジェクトを取得
    cv1 = FpSpread1.ActiveSheetView.GetChildView(i, 0);
    if (!(cv1.RowCount == 0))
    {
      for (j = 0; j <= cv1.RowCount - 1; j++)
      {
        // 階層を展開して表示
        cv1.ExpandRow(j, true);
      }
    }
  }
}

protected void FpSpread1_ChildViewCreated(object sender, FarPoint.Web.Spread.CreateChildViewEventArgs e)
{
  switch (e.SheetView.RelationName)
  {
    case "階層1":
      e.SheetView.Columns[2].Visible = false;
      e.SheetView.Columns[3].Visible = false;
      break;

    case "階層2":
      e.SheetView.Columns[2].Visible = false;
      break;
  }
}
キーワード
データ連結

この文書は、以前は次のFAQ IDで公開されていました : 11344