作成日: 2024/06/25 最終更新日: 2024/09/18
文書種別
不具合
状況
修正済み
詳細
RemoveRowsメソッドでシートの最終行を削除すると、データモデル(BaseSheetDataModelクラス)のChangedイベントが2回発生します。
以下は、行数が500行あるシートで最終行を削除する場合のコードとChangedイベントの出力結果となり、2回目に発生しているイベントの種類が「CellsUpdated」のものが不正な動作です。「RowsRemoved」が1回だけ発生するのが本来の動作になります。
[C#]
private void Form1_Load(object sender, EventArgs e)
{
var sheet = fpSpread1.ActiveSheet;
// DataModelのChangedイベントの設定
sheet.Models.Data.Changed += Data_Changed;
// 末尾行の削除
sheet.RemoveRows(sheet.RowCount - 1, 1);
}
private void Data_Changed(object sender, FarPoint.Win.Spread.Model.SheetDataModelEventArgs e)
{
// イベント発生の確認
Debug.WriteLine($"{e.Type}: Row={e.Row}, RowCount={e.RowCount}");
}
[出力結果]
RowsRemoved: Row=499, RowCount=1
CellsUpdated: Row=499, RowCount=0
回避方法
Service Pack 1(v17.0.4802.2022/v17.1.0)で修正済み。
Service Pack 1を適用せずに対処する方法としては、データモデルのChangedイベントで、e.TypeがCellsUpdatedでe.RowCountが0の場合は後に続く処理を行わない方法が考えられます。
[C#]
private void Data_Changed(object sender, FarPoint.Win.Spread.Model.SheetDataModelEventArgs e)
{
// e.TypeがCellsUpdatedでe.RowCountが0の場合は後に続く処理を行わない
if (e.Type == FarPoint.Win.Spread.Model.SheetDataModelEventType.CellsUpdated & e.RowCount == 0)
{
return;
}
// 後続の処理
...
}