行や列を動的に変更できるテンプレートを作成できますか?
対象製品
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;
}
}
}
}
下記のサンプルコードをご参考にしてください。
なお、列モード テンプレートを使用する場合には、動的に列を追加することができます。
実装例は、MultiRow for Windows Forms 7.0Jに付属するサンプルをご参照ください。
[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;
}
}
}
}