【階層】孫階層セルの設定を行いたい

文書番号 : 22286     文書種別 : 使用方法     最終更新日 : 2006/07/21
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
SheetView クラスのGetChildView メソッドにて子階層SheetViewオブジェクトを取得することができます。
同様にして孫階層のSheetViewオブジェクトを取得することができますので、取得されたSheetViewオブジェクトから孫階層の背景色/文字色の設定などが行えます。

以下のサンプルコードではButton1押下により、孫階層セルの値の変更、背景色の変更を行っています。

【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
    Dim fpChild2 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")), New DataColumn("id3", Type.GetType("System.String"))})

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

    ' 2番目の行を追加します
    fpChild1.Rows.Add(New Object() {"いよかんドリンク", "愛媛", 1, "1-0"})
    fpChild1.Rows.Add(New Object() {"ずんだミルク", "宮城", 1, "1-1"})

    fpChild2 = myDataSet.Tables.Add("孫")
    fpChild2.Columns.AddRange(New DataColumn() {New DataColumn("在庫", Type.GetType("System.String")), New DataColumn("id4", Type.GetType("System.String"))})

    ' 最初の行を追加します
    fpChild2.Rows.Add(New Object() {"100", "0-0"})
    fpChild2.Rows.Add(New Object() {"50", "0-1"})

    ' 2番目の行を追加します
    fpChild2.Rows.Add(New Object() {"250", "1-0"})
    fpChild2.Rows.Add(New Object() {"3", "1-1"})

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

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

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

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

    ' 親階層2列目の子階層・孫階層を展開して表示します
    Dim i As Integer
    FpSpread1.ActiveSheetView.ExpandRow(1, True)
    For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
      ' 子階層のSheetViewオブジェクト
      Dim cv1 As FarPoint.Web.Spread.SheetView = FpSpread1.ActiveSheetView.GetChildView(1, 0)
      cv1.ExpandRow(i, True)
    Next

    ' SPREADコントロールのサイズの設定
    FpSpread1.Height = Unit.Pixel(450)
    FpSpread1.Width = Unit.Pixel(300)
  End Sub

  Private Sub FpSpread1_ChildViewCreated(ByVal sender As System.Object, ByVal e As FarPoint.Web.Spread.CreateChildViewEventArgs) Handles FpSpread1.ChildViewCreated
    Select Case e.SheetView.RelationName
      Case "階層1"
        ' ID列は非表示に設定します
        e.SheetView.Columns(2).Visible = False
        e.SheetView.Columns(3).Visible = False

        e.SheetView.Columns(0).Width = 150

      Case "階層2"
        ' ID列は非表示に設定します
        e.SheetView.Columns(1).Visible = False
    End Select
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' クライアント側の変更の確定します
    FpSpread1.SaveChanges()

    ' 親階層のSheetViewオブジェクト
    Dim sv As FarPoint.Web.Spread.SheetView = FpSpread1.ActiveSheetView
    Dim i As Integer
    Dim j As Integer

    ' 子階層のSheetViewオブジェクト
    Dim cv1 As FarPoint.Web.Spread.SheetView
    For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
      ' 各親行に関連する子階層のSheetViewオブジェクトを取得
      cv1 = FpSpread1.ActiveSheetView.GetChildView(i, 0)
      If Not (cv1.RowCount = 0) Then
        ' 孫階層のSheetViewオブジェクト
        Dim cv2 As FarPoint.Web.Spread.SheetView
        For j = 0 To cv1.RowCount - 1
          ' 各子行に関連する孫階層のSheetViewオブジェクトを取得
          cv2 = cv1.GetChildView(j, 0)
          If Not (cv1.RowCount = 0) Then
            ' 孫階層のA1セルの設定
            cv2.Cells(0, 0).Value = "Sold Out!"
            cv2.Cells(0, 0).BackColor = Color.Red
          End If
        Next
      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;
      DataTable fpChild2;

      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")), new DataColumn("id3", Type.GetType("System.String"))});

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

      // 2番目の行を追加します
      fpChild1.Rows.Add(new object[]{"いよかんドリンク", "愛媛", 1, "1-0"});
      fpChild1.Rows.Add(new object[]{"ずんだミルク", "宮城", 1, "1-1"});

      fpChild2 = myDataSet.Tables.Add("孫");
      fpChild2.Columns.AddRange(new DataColumn[]{new DataColumn("在庫", Type.GetType("System.String")), new DataColumn("id4", Type.GetType("System.String"))});

      // 最初の行を追加します
      fpChild2.Rows.Add(new object[]{"100", "0-0"});
      fpChild2.Rows.Add(new object[]{"50", "0-1"});

      // 2番目の行を追加します
      fpChild2.Rows.Add(new object[]{"250", "1-0"});
      fpChild2.Rows.Add(new object[]{"3", "1-1"});

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

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

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

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

      // 親階層2列目の子階層・孫階層を展開して表示します
      int i;
      FpSpread1.ActiveSheetView.ExpandRow(1, true);
      for (i = 0; i <= FpSpread1.ActiveSheetView.RowCount - 1; i++)
      {
        // 子階層のSheetViewオブジェクト
        FarPoint.Web.Spread.SheetView cv1 = FpSpread1.ActiveSheetView.GetChildView(1, 0);
        cv1.ExpandRow(i, true);
      }

      // SPREADコントロールのサイズの設定
      FpSpread1.Height = Unit.Pixel(450);
      FpSpread1.Width = Unit.Pixel(350);
    }

    private void FpSpread1_ChildViewCreated(object sender, FarPoint.Web.Spread.CreateChildViewEventArgs e)
    {
      if (e.SheetView.RelationName == "階層1")
      {
        // ID列は非表示に設定します
        e.SheetView.Columns[2].Visible = false;
        e.SheetView.Columns[3].Visible = false;

        e.SheetView.Columns[0].Width = 150;
      }
      else if (e.SheetView.RelationName == "階層2")
      {
        // ID列は非表示に設定します
        e.SheetView.Columns[1].Visible = false;
      }
    }

    private void Button1_Click(object sender, System.EventArgs e)
    {
      // クライアント側の変更の確定します
      FpSpread1.SaveChanges();

      // 親階層のSheetViewオブジェクト
      FarPoint.Web.Spread.SheetView sv = FpSpread1.ActiveSheetView;
      int i;
      int j;

      // 子階層のSheetViewオブジェクト
      FarPoint.Web.Spread.SheetView cv1;
      for (i = 0; i <= FpSpread1.ActiveSheetView.RowCount - 1; i++)
      {
        // 各親行に関連する子階層のSheetViewオブジェクトを取得
        cv1 = FpSpread1.ActiveSheetView.GetChildView(i, 0);
        if (!((cv1.RowCount == 0)))
        {
          // 孫階層のSheetViewオブジェクト
          FarPoint.Web.Spread.SheetView cv2;
          for (j = 0; j <= cv1.RowCount - 1; j++)
          {
            // 各子行に関連する孫階層のSheetViewオブジェクトを取得
            cv2 = cv1.GetChildView(j, 0);
            if (!((cv1.RowCount == 0)))
            {
              // 孫階層のA1セルの設定
              cv2.Cells[0, 0].Value = "Sold Out!";
              cv2.Cells[0, 0].BackColor = Color.Red;
            }
          }
        }
      }
    }

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