作成日: 2024/09/12 最終更新日: 2024/09/12
文書種別
使用方法
詳細
AutoSizeRowsを実行する際に、データが大量で、全行のテキストが長く、すべての行で改行が発生するような場合、処理に時間がかかる事があります。
このようなケースでは、高さの自動調整を一括で行う"AutoSizeRows"メソッドの代わりに、"AutoSizeRow"メソッドを用いて、実際に表示されている行に対してのみ自動調整を行う※ことで、パフォーマンスを改善することができます。
※スクロール後の表示には、AfterScrollイベントを利用します。

以下に簡単なサンプルコードを記載します。
◎サンプルコード(VB)
このようなケースでは、高さの自動調整を一括で行う"AutoSizeRows"メソッドの代わりに、"AutoSizeRow"メソッドを用いて、実際に表示されている行に対してのみ自動調整を行う※ことで、パフォーマンスを改善することができます。
※スクロール後の表示には、AfterScrollイベントを利用します。
以下に簡単なサンプルコードを記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 長い文字列の設定
Dim strL = "ComponentOneはデスクトップ、Web、モバイルに対応した.NETアプリケーションの開発を可能にします。小規模な社内システムから大規模エンタープライズシステムまで、業務システムのあらゆるニーズに柔軟に対応し開発生産性を大幅に向上させます。"
' c1FlexGrid1の設定
C1FlexGrid1.Rows.Count = 10001
C1FlexGrid1.Cols(0).Width = 60
C1FlexGrid1.Cols(2).Width = 200
Dim styleWrap As CellStyle = Me.C1FlexGrid1.Styles.Add("Wrap", Me.C1FlexGrid1.Styles.Normal)
styleWrap.WordWrap = True
For index = 1 To 10000
Me.C1FlexGrid1(index, 1) = "行 : " & index.ToString()
Me.C1FlexGrid1(index, 2) = strL
Me.C1FlexGrid1.SetCellStyle(index, 2, styleWrap) 'ワードラップ
Next
AddHandler C1FlexGrid1.AfterScroll, AddressOf C1FlexGrid1_AfterScroll
End Sub
Private Sub buttonWorkaround_Click(sender As Object, e As EventArgs) Handles buttonWorkaround.Click
ResizeVisibleRows()
End Sub
Private Sub C1FlexGrid1_AfterScroll(sender As Object, e As RangeEventArgs)
ResizeVisibleRows()
End Sub
Private Sub ResizeVisibleRows()
For row As Integer = C1FlexGrid1.TopRow To C1FlexGrid1.BottomRow
If Not If(C1FlexGrid1.Rows(row).UserData, False) Then
C1FlexGrid1.AutoSizeRow(row)
C1FlexGrid1.Rows(row).UserData = True '自動調整済の行を処理対象から除外
End If
Next
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
//bool _autoSize = false;
public Form1()
{
InitializeComponent();
// 長い文字列の設定
string strL = "ComponentOneはデスクトップ、Web、モバイルに対応した.NETアプリケーションの開発を可能にします。小規模な社内システムから大規模エンタープライズシステムまで、業務システムのあらゆるニーズに柔軟に対応し開発生産性を大幅に向上させます。";
// c1FlexGrid1の設定
c1FlexGrid1.Rows.Count = 10001;
c1FlexGrid1.Cols[0].Width = 60;
c1FlexGrid1.Cols[2].Width = 200;
CellStyle styleWrap = this.c1FlexGrid1.Styles.Add("Wrap", this.c1FlexGrid1.Styles.Normal);
styleWrap.WordWrap = true;
for (int index = 1; index <= 10000; index++)
{
this.c1FlexGrid1[index, 1] = "行 : " + index.ToString();
this.c1FlexGrid1[index, 2] = strL;
this.c1FlexGrid1.SetCellStyle(index, 2, styleWrap); //ワードラップ
}
c1FlexGrid1.AfterScroll += C1FlexGrid1_AfterScroll;
}
private void buttonWorkaround_Click(object sender, EventArgs e)
{
ResizeVisibleRows();
}
private void C1FlexGrid1_AfterScroll(object sender, RangeEventArgs e)
{
ResizeVisibleRows();
}
void ResizeVisibleRows()
{
for (int row = c1FlexGrid1.TopRow; row <= c1FlexGrid1.BottomRow; row++)
{
if (!(bool)(c1FlexGrid1.Rows[row].UserData ?? false))
{
c1FlexGrid1.AutoSizeRow(row);
c1FlexGrid1.Rows[row].UserData = true; //自動調整済の行を処理対象から除外
}
}
}
}
}