GrapeCity SPREAD for Windows Forms 12.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は連結されています
列:合計は連結されていません