行や列を動的に変更できるテンプレートを作成できますか?

文書番号 : 40698     文書種別 : 使用方法     登録日 : 2017/07/26     最終更新日 : 2017/07/26
文書を印刷する
対象製品
MultiRow for Windows Forms 10.0J
詳細
MultiRowコントロールは、テンプレートの定義を元に実行時に表画面を生成しますので、基本的に行と列のレイアウトを動的に変更することはできません。列を追加するには、コートを用いて現在のテンプレートに列(セルや列ヘッダセル)を追加して、再度MultiRowコントロールに設定する必要があります。
下記のサンプルコードをご参考にしてください。

なお、列モード テンプレートを使用する場合には、動的に列を追加することができます。
詳しくは、製品ヘルプの下記の章を参照してください。

[PowerTools MultiRow for Windows Forms 10.0J]
 - [MultiRowの使い方]
  - [列モード]
   - [列の追加]

[Visual Basic]
Imports GrapeCity.Win.MultiRow

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' MultiRowの初期設定
        Dim template1 As Template = Template.CreateGridTemplate(2, 60, 20)

        GcMultiRow1.Template = template1
        GcMultiRow1.RowCount = 5

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' データの保存
        GcMultiRow1.RestoreValue = True

        ' テンプレートの取得
        Dim temp As Template = GcMultiRow1.Template

        ' セルの追加
        Dim newCell As New TextBoxCell()
        newCell.Name = "textBoxCell" + (temp.Row.Cells.Count).ToString
        newCell.Location = New Point(temp.Row.Cells("textBoxCell" + (temp.Row.Cells.Count - 1).ToString()).Right, newCell.Top)
        newCell.Size = New Size(60, 20)
        temp.Row.Cells.Add(newCell)

        ' テンプレートの幅の変更
        temp.Width += newCell.Width

        ' 列ヘッダの追加
        Dim newHeaderCell As New ColumnHeaderCell()
        newHeaderCell.Name = "columnHeaderCell" + (temp.ColumnHeaders(0).Cells.Count).ToString()
        newHeaderCell.Location = New Point(temp.ColumnHeaders(0).Cells("columnHeaderCell" + (temp.ColumnHeaders(0).Cells.Count - 1).ToString()).Right, newHeaderCell.Top)
        newHeaderCell.Size = New Size(60, 20)
        newHeaderCell.Value = "追加列"
        temp.ColumnHeaders(0).Cells.Add(newHeaderCell)

        ' テンプレートの再設定
        GcMultiRow1.Template = temp

    End Sub
End Class

[C#]
using GrapeCity.Win.MultiRow;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // MultiRowの初期設定
            {
                Template template1 = Template.CreateGridTemplate(2, 60, 20);

                gcMultiRow1.Template = template1;
                gcMultiRow1.RowCount = 5;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // データの保存
            {
                gcMultiRow1.RestoreValue = true;

                // テンプレートの取得
                Template temp = gcMultiRow1.Template;

                // セルの追加
                TextBoxCell newCell = new TextBoxCell();
                newCell.Name = "textBoxCell" + (temp.Row.Cells.Count);
                newCell.Location = new Point(temp.Row.Cells["textBoxCell" + (temp.Row.Cells.Count - 1).ToString()].Right, newCell.Top);
                newCell.Size = new Size(60, 20);
                temp.Row.Cells.Add(newCell);

                // テンプレートの幅の変更
                temp.Width += newCell.Width;

                // 列ヘッダの追加
                ColumnHeaderCell newHeaderCell = new ColumnHeaderCell();
                newHeaderCell.Name = "columnHeaderCell" + (temp.ColumnHeaders[0].Cells.Count).ToString();
                newHeaderCell.Location = new Point(temp.ColumnHeaders[0].Cells["columnHeaderCell" + (temp.ColumnHeaders[0].Cells.Count - 1).ToString()].Right, newHeaderCell.Top);
                newHeaderCell.Size = new Size(60, 20);
                newHeaderCell.Value = "追加列";
                temp.ColumnHeaders[0].Cells.Add(newHeaderCell);

                // テンプレートの再設定
                gcMultiRow1.Template = temp;
            }
        }
    }
}