MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
非連結列を追加する

MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集 > データ連結 > 非連結列を追加する

データ連結を行った際、非連結行を追加する場合にはSheetViewクラスのAddUnboundRowsメソッド呼び出しを行いますが、非連結列を追加する場合には通常のAddColumns メソッド呼び出しを行うことができます。(SPREADにはデータソースに対して列フィールドを新規に追加するという概念がありません)

以下のサンプルではデータ連結後に非連結列を追加し、各列に数式を設定することで小計/合計を表示させる例を紹介します。

【実行例】

非連結列の設定

※出力例については本コンテンツ末尾を参照

 private void Form1_Load(object sender, System.EventArgs e)
 {

   //データセットを手動で作成します
   DataTable DT = new DataTable();
   DataSet DS = new DataSet();
   DT = DS.Tables.Add("SampleTable");
   DT.Columns.AddRange(new DataColumn[] {
               new DataColumn("Num1", Type.GetType("System.Int32")),
               new DataColumn("Num2", Type.GetType("System.Int32")),
               new DataColumn("Num3", Type.GetType("System.Int32"))
               });

   DT.Rows.Add(new object[] {10, 100, 1000});
   DT.Rows.Add(new object[] {20, 200, 2000});
   DT.Rows.Add(new object[] {30, 300, 3000});
   DT.Rows.Add(new object[] {40, 400, 4000});
   DT.Rows.Add(new object[] {50, 500, 5000});

   //データセットを接続します
   fpSpread1.DataSource = DS;

   //列を追加します(列は非連結となります)
   fpSpread1.ActiveSheet.AddColumns(2, 1);
   fpSpread1.ActiveSheet.AddColumns(fpSpread1.ActiveSheet.ColumnCount, 1);

   //小計を表示します
   fpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1;
   fpSpread1.ActiveSheet.SetColumnLabel(0, 2, "小計");
   fpSpread1.ActiveSheet.Columns[2].Formula = "SUBTOTAL(9,RC[-2]:RC[-1])";
   fpSpread1.ActiveSheet.Columns[2].BackColor = Color.LightCyan;
   fpSpread1.ActiveSheet.ColumnHeader.Cells[0, 2].BackColor = Color.LightCyan;
   fpSpread1.ActiveSheet.SetColumnWidth(2, 40);

   //合計を表示します
   fpSpread1.ActiveSheet.SetColumnLabel(0, fpSpread1.ActiveSheet.ColumnCount - 1, "合計");
   fpSpread1.ActiveSheet.Columns[fpSpread1.ActiveSheet.ColumnCount - 1].Formula = "SUBTOTAL(9,RC[-4]:RC[-1])";
   fpSpread1.ActiveSheet.Columns[fpSpread1.ActiveSheet.ColumnCount - 1].BackColor = Color.LightPink;
   fpSpread1.ActiveSheet.ColumnHeader.Cells[0, fpSpread1.ActiveSheet.ColumnCount - 1].BackColor = Color.LightPink;
   fpSpread1.ActiveSheet.SetColumnWidth(fpSpread1.ActiveSheet.ColumnCount - 1, 40);

   //連結状態を取得します
   for (int i = 0; i < fpSpread1.ActiveSheet.ColumnCount; i++)
   {
      if (fpSpread1.ActiveSheet.IsColumnBound(i) == true)
      {
         Console.WriteLine("列:" + fpSpread1.ActiveSheet.Columns[i].Label + "は連結されています");
      }
      else
      {
         Console.WriteLine("列:" + fpSpread1.ActiveSheet.Columns[i].Label + "は連結されていません");
      }
   }

 }
 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

   'データセットを作成します
   Dim DT As New DataTable
   Dim DS As New DataSet
   DT = DS.Tables.Add("SampleTable")
   DT.Columns.AddRange(New DataColumn() { _
               New DataColumn("Num1", Type.GetType("System.Int32")), _
               New DataColumn("Num2", Type.GetType("System.Int32")), _
               New DataColumn("Num3", Type.GetType("System.Int32")) _
               })

   DT.Rows.Add(New Object() {10, 100, 1000})
   DT.Rows.Add(New Object() {20, 200, 2000})
   DT.Rows.Add(New Object() {30, 300, 3000})
   DT.Rows.Add(New Object() {40, 400, 4000})
   DT.Rows.Add(New Object() {50, 500, 5000})

   'データセットを接続します
   FpSpread1.DataSource = DS

   '列を追加します(列は非連結となります)
   FpSpread1.ActiveSheet.AddColumns(2, 1)
   FpSpread1.ActiveSheet.AddColumns(FpSpread1.ActiveSheet.ColumnCount, 1)

   '小計を表示します
   FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
   FpSpread1.ActiveSheet.SetColumnLabel(0, 2, "小計")
   FpSpread1.ActiveSheet.Columns(2).Formula = "SUBTOTAL(9,RC[-2]:RC[-1])"
   FpSpread1.ActiveSheet.Columns(2).BackColor = Color.LightCyan
   FpSpread1.ActiveSheet.ColumnHeader.Cells(0, 2).BackColor = Color.LightCyan
   FpSpread1.ActiveSheet.SetColumnWidth(2, 40)

   '合計を表示します
   FpSpread1.ActiveSheet.SetColumnLabel(0, FpSpread1.ActiveSheet.ColumnCount - 1, "合計")
   FpSpread1.ActiveSheet.Columns(FpSpread1.ActiveSheet.ColumnCount - 1).Formula = "SUBTOTAL(9,RC[-4]:RC[-1])"
   FpSpread1.ActiveSheet.Columns(FpSpread1.ActiveSheet.ColumnCount - 1).BackColor = Color.LightPink
   FpSpread1.ActiveSheet.ColumnHeader.Cells(0, FpSpread1.ActiveSheet.ColumnCount - 1).BackColor = Color.LightPink
   FpSpread1.ActiveSheet.SetColumnWidth(FpSpread1.ActiveSheet.ColumnCount - 1, 40)

   '連結状態を取得します
   For i As Integer = 0 To FpSpread1.ActiveSheet.ColumnCount - 1
      If FpSpread1.ActiveSheet.IsColumnBound(i) Then
         Console.WriteLine("列:" + FpSpread1.ActiveSheet.Columns(i).Label + "は連結されています")
      Else
         Console.WriteLine("列:" + FpSpread1.ActiveSheet.Columns(i).Label + "は連結されていません")
      End If
   Next

 End Sub

出力例

列:Num1は連結されています
列:Num2は連結されています
列:小計は連結されていません
列:Num3は連結されています
列:合計は連結されていません