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

文書番号 : 22287     文書種別 : 使用方法     最終更新日 : 2006/07/21
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
リレーショナルデータベースとの接続後に、各親行に関連付けられている子階層の行数を判断し、SheetView クラスのSetRowExpandable メソッドを使用することで実現できます。
以下のサンプルコードでは子階層を持つ1行目のみ展開マークが表示されます。
なお、サンプルコード内における各機能の詳細については製品ヘルプをご参照ください。

【VB サンプルコード】
  Dim myDataSet As New DataSet

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Page.IsPostBack Then
    Else
      ' サンプルで使用するデータを作成します
      InitData()
      ' Spreadの設定を行います
      InitSpread()
    End If
  End Sub

  Sub InitData()
    Dim fpParent As DataTable
    Dim fpChild1 As DataTable

    fpParent = myDataSet.Tables.Add("親")
    fpParent.Columns.AddRange(New DataColumn() {New DataColumn("製品分類", Type.GetType("System.String")), New DataColumn("原産国", Type.GetType("System.String")), New DataColumn("id1", Type.GetType("System.Int32"))})
    fpParent.Rows.Add(New Object() {"お酒", "日本", 0})
    fpParent.Rows.Add(New Object() {"ソフトドリンク", "日本", 1})

    fpChild1 = myDataSet.Tables.Add("子")
    fpChild1.Columns.AddRange(New DataColumn() {New DataColumn("製品名", Type.GetType("System.String")), New DataColumn("原産地", Type.GetType("System.String")), New DataColumn("id2", Type.GetType("System.Int32"))})

    ' 最初の行を追加します
    fpChild1.Rows.Add(New Object() {"吟醸 ほめごろし", "静岡", 0})
    fpChild1.Rows.Add(New Object() {"麦焼酎 ちこちこ", "大分", 0})

    ' リレーションシップを設定します
    myDataSet.Relations.Add("階層1", fpParent.Columns("id1"), fpChild1.Columns("id2"))
  End Sub

  Sub InitSpread()
    ' シートの階層表示を行います
    FpSpread1.HierarchicalView = True

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

    ' ID列は非表示に設定します
    FpSpread1.ActiveSheetView.Columns(2).Visible = False

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

【C# サンプルコード】
    DataSet myDataSet = new DataSet();

    private void Page_Load(object sender, System.EventArgs e)
    {
      if (Page.IsPostBack)
      {
      }
      else
      {
        // サンプルで使用するデータを作成します
        InitData();
        // Spreadの設定を行います
        InitSpread();
      }
    }

    void InitData()
    {
      DataTable fpParent;
      DataTable fpChild1;

      fpParent = myDataSet.Tables.Add("親");
      fpParent.Columns.AddRange(new DataColumn[]{new DataColumn("製品分類", Type.GetType("System.String")), new DataColumn("原産国", Type.GetType("System.String")), new DataColumn("id1", Type.GetType("System.Int32"))});
      fpParent.Rows.Add(new object[]{"お酒", "日本", 0});
      fpParent.Rows.Add(new object[]{"ソフトドリンク", "日本", 1});

      fpChild1 = myDataSet.Tables.Add("子");
      fpChild1.Columns.AddRange(new DataColumn[]{new DataColumn("製品名", Type.GetType("System.String")), new DataColumn("原産地", Type.GetType("System.String")), new DataColumn("id2", Type.GetType("System.Int32"))});

      // 最初の行を追加します
      fpChild1.Rows.Add(new object[]{"吟醸 ほめごろし", "静岡", 0});
      fpChild1.Rows.Add(new object[]{"麦焼酎 ちこちこ", "大分", 0});

      // リレーションシップを設定します
      myDataSet.Relations.Add("階層1", fpParent.Columns["id1"], fpChild1.Columns["id2"]);
    }

    void InitSpread()
    {
      // シートの階層表示を行います
      FpSpread1.HierarchicalView = true;

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

      // ID列は非表示に設定します
      FpSpread1.ActiveSheetView.Columns[2].Visible = false;

      FarPoint.Web.Spread.SheetView s;
      for (int i = 0; i <= FpSpread1.ActiveSheetView.RowCount - 1; i++)
      {
        //各親行に関連する子ビューを取得します
        s = FpSpread1.ActiveSheetView.GetChildView(i, 0);
        if (s.RowCount == 0)
        {
          //子ビュー上の行数が0の場合は展開不可とします
          FpSpread1.ActiveSheetView.SetRowExpandable(i, false);
        }
      }
      
    }

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