階層表示機能を実装している際、子階層を持たない親行ヘッダの展開マークを非表示にしたい

文書番号 : 33635     文書種別 : 使用方法     登録日 : 2012/11/14     最終更新日 : 2014/09/12
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
詳細
シートのSetRowExpandableメソッドの第2引数をFalseすることで、階層表示の展開マークが表示されません。
また、リレーショナルデータベースとの接続後に、各親行に関連付けられている子階層の行数を判断することができます。以下のサンプルコードでは子階層を持つ1行目および2行目のみ展開マークが表示されます。

◎サンプルコード(VB)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim ds As New DataSet
  Dim fpParent As DataTable
  Dim fpChild1 As DataTable
  fpParent = ds.Tables.Add("SAMPLE")
  fpParent.Columns.AddRange(New DataColumn() {New DataColumn("Column1", Type.GetType("System.String")), New DataColumn("Column2", Type.GetType("System.Int32"))})
  fpParent.Rows.Add(New Object() {"親1", 0})
  fpParent.Rows.Add(New Object() {"親2", 1})
  fpParent.Rows.Add(New Object() {"親3", 2})

  fpChild1 = ds.Tables.Add("Child1")
  fpChild1.Columns.AddRange(New DataColumn() {New DataColumn("Column1", Type.GetType("System.String")), New DataColumn("Column2", Type.GetType("System.Int32"))})

  fpChild1.Rows.Add(New Object() {"子1-1", 0})
  fpChild1.Rows.Add(New Object() {"子1-2", 0})
  fpChild1.Rows.Add(New Object() {"子1-3", 0})

  fpChild1.Rows.Add(New Object() {"子2-1", 1})
  fpChild1.Rows.Add(New Object() {"子2-2", 1})
  fpChild1.Rows.Add(New Object() {"子2-3", 1})

  ds.Relations.Add("Relation1", fpParent.Columns("Column2"), fpChild1.Columns("Column2"))
  'データベース接続
  FpSpread1.ActiveSheet.DataSource = ds

  Dim s As FarPoint.Win.Spread.SheetView
  For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
    '各親行に関連する子ビューを取得します
    s = FpSpread1.ActiveSheet.GetChildView(i, 0)
    If s.RowCount = 0 Then
      '子ビュー上の行数が0の場合は展開不可とします
      FpSpread1.Sheets(0).SetRowExpandable(i, False)
    End If
  Next
End Sub


◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
  DataSet ds = new DataSet();
  DataTable fpParent = new DataTable();
  DataTable fpChild1 = new DataTable();

  fpParent = ds.Tables.Add("SAMPLE");
  fpParent.Columns.AddRange(new DataColumn[] { new DataColumn("Column1", Type.GetType("System.String")), new DataColumn("Column2", Type.GetType("System.Int32")) });
  fpParent.Rows.Add(new object[] { "親1", 0 });
  fpParent.Rows.Add(new object[] { "親2", 1 });
  fpParent.Rows.Add(new object[] { "親3", 2 });

  fpChild1 = ds.Tables.Add("Child1");
  fpChild1.Columns.AddRange(new DataColumn[] { new DataColumn("Column1", Type.GetType("System.String")), new DataColumn("Column2", Type.GetType("System.Int32")) });

  fpChild1.Rows.Add(new object[] { "子1-1", 0 });
  fpChild1.Rows.Add(new object[] { "子1-2", 0 });
  fpChild1.Rows.Add(new object[] { "子1-3", 0 });

  fpChild1.Rows.Add(new object[] { "子2-1", 1 });
  fpChild1.Rows.Add(new object[] { "子2-2", 1 });
  fpChild1.Rows.Add(new object[] { "子2-3", 1 });

  ds.Relations.Add("Relation1", fpParent.Columns["Column2"], fpChild1.Columns["Column2"]);
  //データベース接続
  fpSpread1.ActiveSheet.DataSource = ds;

  FarPoint.Win.Spread.SheetView s;
  for (int i = 0; i <= fpSpread1.ActiveSheet.RowCount - 1; i++)
  {
    //各親行に関連する子ビューを取得します
    s = fpSpread1.ActiveSheet.GetChildView(i, 0);
    if (s.RowCount == 0)
    {
      //子ビュー上の行数が0の場合は展開不可とします
      fpSpread1.ActiveSheet.SetRowExpandable(i, false);
    }
  }
}
関連情報
キーワード
「階層」