作成日: 2023/04/24 最終更新日: 2023/04/24
文書種別
使用方法
詳細
C1FlexGridRowDetail(行詳細)を用いたマスター/詳細形式の階層ビューで、詳細行のワードラップをTrueにして行の折り返しを許可したとき、[+]ボタンで展開すると、詳細グリッドの最後の部分が切れてしまうことがあります。
この現象を避け、詳細グリッド全体を表示させるには、[+]ボタンクリック時に発生するControlAddedイベントで、 C1FlexGridのAutoSizeRowメソッドを実行します。

以下に簡単な設定コードを記載します。
◎サンプルコード(VB)
この現象を避け、詳細グリッド全体を表示させるには、[+]ボタンクリック時に発生するControlAddedイベントで、 C1FlexGridのAutoSizeRowメソッドを実行します。
以下に簡単な設定コードを記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 行数の設定
Dim maxParentRows As Integer = 50 'マスターグリッド
Dim maxChildRows As Integer = 5 '詳細グリッド
' データの作成
Dim ds As New DataSet()
ds.EnforceConstraints = False
Dim Parent As DataTable = ds.Tables.Add("Parent")
Parent.Columns.Add("ParentA", GetType(Int32))
For i = 0 To maxParentRows - 1
Parent.Rows.Add(i)
Next
Dim child As DataTable = ds.Tables.Add("Child")
child.Columns.AddRange({
New DataColumn("ChildA", GetType(Int32)),
New DataColumn("ChildB")
})
For i = 0 To maxParentRows - 1
For j = 0 To maxChildRows - 1
child.Rows.Add(i, $"P{i}C{j} あいうえおかきくけこ")
Next
Next
ds.Relations.Add("PCRelation", Parent.Columns("ParentA"), child.Columns("ChildA"))
' FlexGridの設定
With C1FlexGrid1
.DataSource = ds
.DataMember = "Parent"
.RowDetailProvider = Function(g, r) New C1FlexGridRowDetail()
.AreRowDetailsFrozen = False
.RowDetailsVisibilityMode = RowDetailsVisibilityMode.Collapsed
.Cols(1).Width = 240
End With
End Sub
Private Sub FlexGrid1_ControlAdded(sender As Object, e As ControlEventArgs) Handles C1FlexGrid1.ControlAdded
'ワードラップの設定
Dim grid As C1FlexGrid = DirectCast(e.Control.Controls(0).Controls(0), C1FlexGrid)
grid.BeginInvoke(New MethodInvoker(
Sub()
With grid
.Styles.Normal.WordWrap = True
For Each cr As Row In .Rows
.AutoSizeRow(cr.Index)
Next
End With
' 詳細グリッド全体を表示
C1FlexGrid1.AutoSizeRow(C1FlexGrid1.Row)
End Sub
))
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 行数の設定
int maxParentRows = 50;
int maxChildRows = 5;
// データの作成
DataSet ds = new DataSet();
ds.EnforceConstraints = false;
DataTable parent = ds.Tables.Add("Parent");
parent.Columns.Add("ParentA", typeof(Int32));
for (int i = 0; (i <= (maxParentRows - 1)); i++)
{
parent.Rows.Add(i);
}
DataTable child = ds.Tables.Add("Child");
child.Columns.AddRange(new DataColumn[] {
new DataColumn("ChildA", typeof(Int32)),
new DataColumn("ChildB")
});
for (int i = 0; i < maxParentRows; i++)
{
for (int j = 0; j < maxChildRows; j++)
{
child.Rows.Add(i, $"P{i}C{j} あいうえおかきくけこ");
}
}
ds.Relations.Add("PCRelation", parent.Columns["ParentA"], child.Columns["ChildA"]);
// FlexGridの設定
c1FlexGrid1.DataSource = ds;
c1FlexGrid1.DataMember = "Parent";
c1FlexGrid1.RowDetailProvider = (g, r) => new C1FlexGridRowDetail();
c1FlexGrid1.AreRowDetailsFrozen = false;
c1FlexGrid1.RowDetailsVisibilityMode = RowDetailsVisibilityMode.Collapsed;
c1FlexGrid1.Cols[1].Width = 240;
}
private void c1FlexGrid1_ControlAdded(object sender, ControlEventArgs e)
{
// ワードラップの設定
C1FlexGrid grid = (C1FlexGrid)e.Control.Controls[0].Controls[0];
grid.BeginInvoke(new MethodInvoker(() =>
{
grid.Styles.Normal.WordWrap = true;
foreach (Row cr in grid.Rows)
{
grid.AutoSizeRow(cr.Index);
}
// 詳細グリッド全体を表示
c1FlexGrid1.AutoSizeRow(c1FlexGrid1.Row);
}));
}
}
}