作成日: 2022/06/15 最終更新日: 2022/06/15
文書種別
使用方法
詳細
FlexGrid では、C1FlexGridクラスのFootersプロパティを使用して、行の最後に列フッターを追加できます。
このフッターに合計などの集計値を表示し、OwnerDrawCellイベントでセルのマージを行うと、データが更新されるたびにちらつきが発生したり、集計結果の更新に時間が掛かかったりすることがあります。
OwnerDrawCellイベントは現在表示されているすべてのセルの数だけ発生しますが、このイベント内でマージ処理を行う事により、さらにOwnerDrawCellイベントが引き起こされるためです。
この動作を避けるには、セルのマージ処理を、OwnerDrawCellイベントではなくFormのLoadイベントなどで行ってください。

(変更前)
◎サンプルコード(VB)
(変更後)
※変更箇所のみ記載 ◎サンプルコード(VB)
このフッターに合計などの集計値を表示し、OwnerDrawCellイベントでセルのマージを行うと、データが更新されるたびにちらつきが発生したり、集計結果の更新に時間が掛かかったりすることがあります。
OwnerDrawCellイベントは現在表示されているすべてのセルの数だけ発生しますが、このイベント内でマージ処理を行う事により、さらにOwnerDrawCellイベントが引き起こされるためです。
この動作を避けるには、セルのマージ処理を、OwnerDrawCellイベントではなくFormのLoadイベントなどで行ってください。

(変更前)
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' フッタの設定
C1FlexGrid1.Footers.Descriptions.Clear()
C1FlexGrid1.Footers.Descriptions.Add(New FooterDescription)
C1FlexGrid1.Footers.Fixed = True
C1FlexGrid1.Footers.Descriptions(0).Aggregates.Add(New C1.Win.C1FlexGrid.AggregateDefinition() With {
.Column = 9,
.Aggregate = C1.Win.C1FlexGrid.AggregateEnum.Sum
})
C1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw
' 値の設定
Dim r1 As Random = New System.Random
Dim i As Integer = 0
For i = 0 To C1FlexGrid1.Rows.Count - 1
C1FlexGrid1(i, 9) = r1.Next(0, 1000)
Next
End Sub
Private Sub C1FlexGrid1_OwnerDrawCell(sender As Object, e As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles C1FlexGrid1.OwnerDrawCell
' フッタのセルのマージ
C1FlexGrid1.AllowMerging = AllowMergingEnum.Custom
Dim range As CellRange = C1FlexGrid1.GetCellRange((C1FlexGrid1.Rows.Count - 1), 1, (C1FlexGrid1.Rows.Count - 1), 8)
C1FlexGrid1.MergedRanges.Add(range)
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// フッタの設定
c1FlexGrid1.Footers.Descriptions.Clear();
c1FlexGrid1.Footers.Descriptions.Add(new FooterDescription());
c1FlexGrid1.Footers.Fixed = true;
c1FlexGrid1.Footers.Descriptions[0].Aggregates.Add(new AggregateDefinition() { Column = 9, Aggregate = AggregateEnum.Sum });
c1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
// 値の設定
Random r1 = new System.Random();
for (int i = 0; i< c1FlexGrid1.Rows.Count; i++)
{
c1FlexGrid1[i, 9] =r1.Next(0, 1000);
}
}
private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
// フッタのセルのマージ
c1FlexGrid1.AllowMerging = AllowMergingEnum.Custom;
var range = c1FlexGrid1.GetCellRange(c1FlexGrid1.Rows.Count - 1, 1, c1FlexGrid1.Rows.Count - 1, 8);
c1FlexGrid1.MergedRanges.Add(range);
}
}
}
(変更後)
※変更箇所のみ記載 ◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
・・・省略・・・
' フッタのセルのマージ
C1FlexGrid1.AllowMerging = AllowMergingEnum.Custom
Dim range As CellRange = C1FlexGrid1.GetCellRange((C1FlexGrid1.Rows.Count - 1), 1, (C1FlexGrid1.Rows.Count - 1), 8)
C1FlexGrid1.MergedRanges.Add(range)
End Sub
Private Sub C1FlexGrid1_OwnerDrawCell(sender As Object, e As C1.Win.C1FlexGrid.OwnerDrawCellEventArgs) Handles C1FlexGrid1.OwnerDrawCell
'' フッタのセルのマージ
'C1FlexGrid1.AllowMerging = AllowMergingEnum.Custom
'Dim range As CellRange = C1FlexGrid1.GetCellRange((C1FlexGrid1.Rows.Count - 1), 1, (C1FlexGrid1.Rows.Count - 1), 8)
'C1FlexGrid1.MergedRanges.Add(range)
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
・・・省略・・・
// フッタのセルのマージ
c1FlexGrid1.AllowMerging = AllowMergingEnum.Custom;
var range = c1FlexGrid1.GetCellRange(c1FlexGrid1.Rows.Count - 1, 1, c1FlexGrid1.Rows.Count - 1, 3);
c1FlexGrid1.MergedRanges.Add(range);
}
private void c1FlexGrid1_OwnerDrawCell(object sender, OwnerDrawCellEventArgs e)
{
//// フッタのセルのマージ
//c1FlexGrid1.AllowMerging = AllowMergingEnum.Custom;
//var range = c1FlexGrid1.GetCellRange(c1FlexGrid1.Rows.Count - 1, 1, c1FlexGrid1.Rows.Count - 1, 8);
//c1FlexGrid1.MergedRanges.Add(range);
}