作成日: 2024/07/11 最終更新日: 2024/07/11
文書種別
使用方法
詳細
FlexGridのTransposedプロパティをTrueに設定すると、行と列を反転し、列ヘッダーを行の左側に、列のデータを行方向に表示することができます。
このとき、転置後もセルのサイズを同じままにするには、転置前の列幅・行高を保存しておき、転置後に行の高さとしてこの「列幅」を、列の幅として「行高」を設定します。
また、AutoSizeColsおよびAutoSizeRowsメソッドを用いてセルのサイズ(列幅・行高)を自動調整することで、転置前後のグリッドを見やすくすることもできます。

以下に、簡単な設定例を記載します。
・C1FlexGrid1では、転置後に列幅・行高を設定し直します。
・C1FlexGrid2では、転置前後にAutoSizeメソッドを実行します。
※フォーム上にC1FlexGridコントロールおよびボタンをそれぞれを2個づつ配置し、下記コードを追加して動作をご確認ください。
◎サンプルコード(VB)
このとき、転置後もセルのサイズを同じままにするには、転置前の列幅・行高を保存しておき、転置後に行の高さとしてこの「列幅」を、列の幅として「行高」を設定します。
また、AutoSizeColsおよびAutoSizeRowsメソッドを用いてセルのサイズ(列幅・行高)を自動調整することで、転置前後のグリッドを見やすくすることもできます。
以下に、簡単な設定例を記載します。
・C1FlexGrid1では、転置後に列幅・行高を設定し直します。
・C1FlexGrid2では、転置前後にAutoSizeメソッドを実行します。
※フォーム上にC1FlexGridコントロールおよびボタンをそれぞれを2個づつ配置し、下記コードを追加して動作をご確認ください。
◎サンプルコード(VB)
Public Class Form1
Dim initWidth, initHeight As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As DataTable = New DataTable("TEST")
dt.Columns.Add("ID", GetType(String))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Price", GetType(Integer))
Dim r As Random = New Random()
For i = 0 To 19
Dim iR = r.Next(1000, 10000)
dt.Rows.Add(i.ToString(), "製品" & Microsoft.VisualBasic.ChrW(65 + i).ToString(), iR)
Next
dt.AcceptChanges()
C1FlexGrid1.DataSource = dt
C1FlexGrid2.DataSource = dt
' c1FlexGrid1 : ---列幅・行高の指定---
initHeight = C1FlexGrid1.Rows(1).HeightDisplay '18
initWidth = C1FlexGrid1.Cols(1).WidthDisplay '90
C1FlexGrid1.Rows.DefaultSize = initHeight
C1FlexGrid1.Cols.DefaultSize = initWidth
' c1FlexGrid2 : ---サイズの自動調整---
C1FlexGrid2.AutoSizeRows()
C1FlexGrid2.AutoSizeCols()
End Sub
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
'----転地グリッド:列幅・行高の指定----
C1FlexGrid1.Transposed = Not C1FlexGrid1.Transposed
If C1FlexGrid1.Transposed = True Then
C1FlexGrid1.Rows.DefaultSize = initWidth 'Rows.DefaultSize⇒列幅になる
C1FlexGrid1.Rows.MinSize = initWidth
C1FlexGrid1.Cols.DefaultSize = initHeight 'Cols.DefaultSize⇒行高になる
C1FlexGrid1.Cols.MinSize = initHeight
Else
C1FlexGrid1.Rows.DefaultSize = initHeight '行高
C1FlexGrid1.Rows.MinSize = initHeight
C1FlexGrid1.Cols.DefaultSize = initWidth '列幅
C1FlexGrid1.Cols.MinSize = initWidth
End If
End Sub
Private Sub button2_Click(sender As Object, e As EventArgs) Handles button2.Click
'----転地グリッド:サイズの自動調整----
C1FlexGrid2.Transposed = Not C1FlexGrid2.Transposed
If C1FlexGrid2.Transposed Then
C1FlexGrid2.AutoSizeRows()
C1FlexGrid2.AutoSizeCols()
Else
C1FlexGrid2.AutoSizeCols()
C1FlexGrid2.AutoSizeRows()
End If
End Sub
End Class
◎サンプルコード(C#)
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
int initWidth, initHeight;
public Form1()
{
InitializeComponent();
// データの作成
DataTable dt = new DataTable("TEST");
dt.Columns.Add("ID", typeof(String));
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Price", typeof(Int32));
Random r = new Random();
for (int i = 0; i < 20; i++)
{
int iR = r.Next(1000, 10000);
dt.Rows.Add(i.ToString(), "製品" + ((char)(65 + i)).ToString(), iR);
}
dt.AcceptChanges();
c1FlexGrid1.DataSource = dt;
c1FlexGrid2.DataSource = dt;
// c1FlexGrid1 : ---列幅・行高の指定---
initHeight = c1FlexGrid1.Rows[1].HeightDisplay; //18
initWidth = c1FlexGrid1.Cols[1].WidthDisplay; //90
c1FlexGrid1.Rows.DefaultSize = initHeight;
c1FlexGrid1.Cols.DefaultSize = initWidth;
// c1FlexGrid2 : ---サイズの自動調整---
c1FlexGrid2.AutoSizeRows();
c1FlexGrid2.AutoSizeCols();
}
private void button1_Click(object sender, EventArgs e)
{
//----転地グリッド:列幅・行高の指定----
c1FlexGrid1.Transposed = !c1FlexGrid1.Transposed;
if (c1FlexGrid1.Transposed == true)
{
c1FlexGrid1.Rows.DefaultSize = initWidth; //Rows.DefaultSize⇒列幅になる
c1FlexGrid1.Rows.MinSize = initWidth;
c1FlexGrid1.Cols.DefaultSize = initHeight; //Cols.DefaultSize⇒行高になる
c1FlexGrid1.Cols.MinSize = initHeight;
}
else
{
c1FlexGrid1.Rows.DefaultSize = initHeight; //行高
c1FlexGrid1.Rows.MinSize = initHeight;
c1FlexGrid1.Cols.DefaultSize = initWidth; //列幅
c1FlexGrid1.Cols.MinSize = initWidth;
}
}
private void button2_Click(object sender, EventArgs e)
{
//----転地グリッド:サイズの自動調整----
c1FlexGrid2.Transposed = !c1FlexGrid2.Transposed;
if (c1FlexGrid2.Transposed)
{
c1FlexGrid2.AutoSizeRows();
c1FlexGrid2.AutoSizeCols();
}
else
{
c1FlexGrid2.AutoSizeCols();
c1FlexGrid2.AutoSizeRows();
}
}
}
}