作成日: 2018/09/19 最終更新日: 2018/12/18
文書種別
不具合
状況
修正済み
詳細
■事象
フィルタリングされた状態で、行数を0に変更すると、以下の例外が発生します。
----------------------------------------
System.IndexOutOfRangeException: インデックスが配列の境界外です。
----------------------------------------
■サンプルコード(VB.NET)
■再現手順
1.フォーム上にSPREADとButtonコントロールを配置します。
2.上記のサンプルコードを実装し、プロジェクトを実行します。
3.任意の条件でフィルタリングをします。
4.ボタンをクリックします。
→例外が発生します。
■備考
1.この事象は、AutoFilterModeプロパティが「EnhancedContextMenu」または「FilterBar」に設定されている場合にのみ発生します。「FilterGadget」に設定されている場合、発生しません。
2.この事象は、RowCountプロパティを使用して行数を0に設定した時だけではなく、他のメソッド・プロパティを使用して行数を0に設定した時にも発生します。たとえば、以下のような手法が該当します。
また、以下のようにデータモデルから行数を変更しても、同じ問題が発生します。
フィルタリングされた状態で、行数を0に変更すると、以下の例外が発生します。
----------------------------------------
System.IndexOutOfRangeException: インデックスが配列の境界外です。
----------------------------------------
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
With FpSpread1.ActiveSheet
' 行・列数を設定します。
.ColumnCount = 1
.RowCount = 3
' フィルタリングを有効にします。
.Columns(0).AllowAutoFilter = True
.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.EnhancedContextMenu
' サンプルデータを設定します。
.Cells(0, 0).Value = "a"
.Cells(1, 0).Value = "b"
.Cells(2, 0).Value = "c"
End With
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 行数を0に設定します。
FpSpread1.ActiveSheet.RowCount = 0
End Sub
With FpSpread1.ActiveSheet
' 行・列数を設定します。
.ColumnCount = 1
.RowCount = 3
' フィルタリングを有効にします。
.Columns(0).AllowAutoFilter = True
.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.EnhancedContextMenu
' サンプルデータを設定します。
.Cells(0, 0).Value = "a"
.Cells(1, 0).Value = "b"
.Cells(2, 0).Value = "c"
End With
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 行数を0に設定します。
FpSpread1.ActiveSheet.RowCount = 0
End Sub
■再現手順
1.フォーム上にSPREADとButtonコントロールを配置します。
2.上記のサンプルコードを実装し、プロジェクトを実行します。
3.任意の条件でフィルタリングをします。
4.ボタンをクリックします。
→例外が発生します。
■備考
1.この事象は、AutoFilterModeプロパティが「EnhancedContextMenu」または「FilterBar」に設定されている場合にのみ発生します。「FilterGadget」に設定されている場合、発生しません。
2.この事象は、RowCountプロパティを使用して行数を0に設定した時だけではなく、他のメソッド・プロパティを使用して行数を0に設定した時にも発生します。たとえば、以下のような手法が該当します。
FpSpread1.ActiveSheet.Rows.Count = 0
FpSpread1.ActiveSheet.Rows.Clear()
FpSpread1.ActiveSheet.Rows.Remove(0, FpSpread1.ActiveSheet.RowCount)
FpSpread1.ActiveSheet.Rows.Clear()
FpSpread1.ActiveSheet.Rows.Remove(0, FpSpread1.ActiveSheet.RowCount)
また、以下のようにデータモデルから行数を変更しても、同じ問題が発生します。
Dim dtm As FarPoint.Win.Spread.Model.DefaultSheetDataModel = FpSpread1.ActiveSheet.Models.Data
dtm.RowCount = 0
dtm.RemoveRows(0, dtm.RowCount)
dtm.RowCount = 0
dtm.RemoveRows(0, dtm.RowCount)
回避方法
Service Pack 2(v11.0.4503.2012)で修正済み。
Service Pack 2を適用せずに対処する方法としては、行数を0に変更する前に、AutoFilterプロパティ(デフォルト=True)をFalseに設定し、行数変更後、Trueに戻すことで回避することが可能です。
■サンプルコード(VB.NET)
Service Pack 2を適用せずに対処する方法としては、行数を0に変更する前に、AutoFilterプロパティ(デフォルト=True)をFalseに設定し、行数変更後、Trueに戻すことで回避することが可能です。
■サンプルコード(VB.NET)
' フィルタリングの自動更新を無効にします。
FpSpread1.ActiveSheet.AutoFilter = False
' 行数を0に設定します。
FpSpread1.ActiveSheet.RowCount = 0
' フィルタリングの自動更新を有効に戻します。
FpSpread1.ActiveSheet.AutoFilter = True
FpSpread1.ActiveSheet.AutoFilter = False
' 行数を0に設定します。
FpSpread1.ActiveSheet.RowCount = 0
' フィルタリングの自動更新を有効に戻します。
FpSpread1.ActiveSheet.AutoFilter = True
旧文書番号
83240