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

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

下記のサンプルコードをご参考にしてください。

なお、列モード テンプレートを使用する場合には、動的に列を追加することができます。

実装例は、MultiRow for Windows Forms 7.0Jに付属するサンプルをご参照ください。
  • <インストール先フォルダ>¥Samples¥Sample.zip¥Functions¥CS¥01_Grid¥ColumnMode
  • <インストール先フォルダ>¥Samples¥Sample.zip¥Functions¥VB¥01_Grid¥ColumnMode

    [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;
          }
        }
      }
    }
  • 関連情報