作成日: 2019/07/10 最終更新日: 2019/07/10
文書種別
不具合
状況
修正済み
詳細
複数のキーを指定してSortRowsメソッドを実行した場合に、最初のキー(インデックスが0)に対応するソートが行われません。
本現象はソート対象となる列にNull(Nothing)値のセルを含んでいる場合に発生します。
【再現手順】
1.新規作成したプロジェクトのFormにFpSpreadを配置します。
2.下記のサンプルコードを記述しプロジェクトをデバッグ実行します。
■サンプルコード(VB.NET)
本現象はソート対象となる列にNull(Nothing)値のセルを含んでいる場合に発生します。
【再現手順】
1.新規作成したプロジェクトのFormにFpSpreadを配置します。
2.下記のサンプルコードを記述しプロジェクトをデバッグ実行します。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FpSpread1.ActiveSheet.RowCount = 10
Dim r As New Random()
For i As Integer = 0 To 7
FpSpread1.ActiveSheet.SetValue(i, 0, r.Next(1, 100))
FpSpread1.ActiveSheet.SetValue(i, 1, Chr(65 + CInt(i / 3)))
Next
Dim sort(1) As FarPoint.Win.Spread.SortInfo
sort(0) = New FarPoint.Win.Spread.SortInfo(1, True, Comparer.Default)
sort(1) = New FarPoint.Win.Spread.SortInfo(0, True, Comparer.Default)
' 現象発生
FpSpread1.ActiveSheet.SortRows(0, FpSpread1.ActiveSheet.RowCount, sort)
End Sub
FpSpread1.ActiveSheet.RowCount = 10
Dim r As New Random()
For i As Integer = 0 To 7
FpSpread1.ActiveSheet.SetValue(i, 0, r.Next(1, 100))
FpSpread1.ActiveSheet.SetValue(i, 1, Chr(65 + CInt(i / 3)))
Next
Dim sort(1) As FarPoint.Win.Spread.SortInfo
sort(0) = New FarPoint.Win.Spread.SortInfo(1, True, Comparer.Default)
sort(1) = New FarPoint.Win.Spread.SortInfo(0, True, Comparer.Default)
' 現象発生
FpSpread1.ActiveSheet.SortRows(0, FpSpread1.ActiveSheet.RowCount, sort)
End Sub
回避方法
Service Pack 2(v12.0.4503.2012)で修正済み。
Service Pack を適用せずに対処する場合、列にNull値が含まれないように行数を8に設定するか(回避策1)、Null値のセルに対してString.Emptyを設定する方法(回避策2)
のいずれかで回避が可能です。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する場合、列にNull値が含まれないように行数を8に設定するか(回避策1)、Null値のセルに対してString.Emptyを設定する方法(回避策2)
のいずれかで回避が可能です。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'FpSpread1.ActiveSheet.RowCount = 10
' 回避策1
FpSpread1.ActiveSheet.RowCount = 8
Dim r As New Random()
For i As Integer = 0 To 7
FpSpread1.ActiveSheet.SetValue(i, 0, r.Next(1, 100))
FpSpread1.ActiveSheet.SetValue(i, 1, Chr(65 + CInt(i / 3)))
Next
' 回避策2(Nothingの場合にはString.Emptyを代入)
For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
If FpSpread1.ActiveSheet.GetValue(i, 0) Is Nothing Then
FpSpread1.ActiveSheet.SetValue(i, 0, String.Empty)
End If
If FpSpread1.ActiveSheet.GetValue(i, 1) Is Nothing Then
FpSpread1.ActiveSheet.SetValue(i, 1, String.Empty)
End If
Next
Dim sort(1) As FarPoint.Win.Spread.SortInfo
sort(0) = New FarPoint.Win.Spread.SortInfo(1, True, Comparer.Default)
sort(1) = New FarPoint.Win.Spread.SortInfo(0, True, Comparer.Default)
FpSpread1.ActiveSheet.SortRows(0, FpSpread1.ActiveSheet.RowCount, sort)
End Sub
'FpSpread1.ActiveSheet.RowCount = 10
' 回避策1
FpSpread1.ActiveSheet.RowCount = 8
Dim r As New Random()
For i As Integer = 0 To 7
FpSpread1.ActiveSheet.SetValue(i, 0, r.Next(1, 100))
FpSpread1.ActiveSheet.SetValue(i, 1, Chr(65 + CInt(i / 3)))
Next
' 回避策2(Nothingの場合にはString.Emptyを代入)
For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1
If FpSpread1.ActiveSheet.GetValue(i, 0) Is Nothing Then
FpSpread1.ActiveSheet.SetValue(i, 0, String.Empty)
End If
If FpSpread1.ActiveSheet.GetValue(i, 1) Is Nothing Then
FpSpread1.ActiveSheet.SetValue(i, 1, String.Empty)
End If
Next
Dim sort(1) As FarPoint.Win.Spread.SortInfo
sort(0) = New FarPoint.Win.Spread.SortInfo(1, True, Comparer.Default)
sort(1) = New FarPoint.Win.Spread.SortInfo(0, True, Comparer.Default)
FpSpread1.ActiveSheet.SortRows(0, FpSpread1.ActiveSheet.RowCount, sort)
End Sub
旧文書番号
84232