【表示】フィルタリングを行った後にソートを行うと、表示データの整合性が取れない

文書番号 : 22615     文書種別 : 不具合     最終更新日 : 2006/09/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
動作保証環境と同様
状況
修正済み
詳細
フィルタリングを行った後にソートを行った場合、表示/非表示の行(表示上の行インデックス)は変わらずにデータだけが並び替わるため、フィルタリングで非表示とした行が表示されます。

下記、再現手順とサンプルコードです。

[再現手順]
1.新規WebフォームにSPREADだけを配置します。
2.下記のサンプルコードをコピーします。
3.アプリケーションを実行します。
4.1列目を任意の値でフィルタリングします。
5.2列目をダブルクリックし、ソートを行います。
6.4のフィルタリングで非表示としたデータが表示されます。

[サンプルコード]
-------------------------
Webフォームクラス
-------------------------
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Page.IsPostBack Then
      Return
    End If

    FpSpread1.ActiveSheetView.RowCount = 20
    FpSpread1.ActiveSheetView.ColumnCount = 3
    FpSpread1.ActiveSheetView.PageSize = 20

    Dim r As Random = New Random(DateTime.Now.Hour * DateTime.Now.Minute * DateTime.Now.Second + DateTime.Now.Millisecond)

    Dim i As Integer
    Dim j As Integer

    For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
      For j = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
        ' ランダムな数値データを設定します
        FpSpread1.ActiveSheetView.Cells(i, j).Value = r.Next(0, 5)
      Next j
    Next i

    FpSpread1.ActiveSheetView.AllowSort = True

    Dim fcd As New FarPoint.Web.Spread.FilterColumnDefinition(0, FarPoint.Web.Spread.FilterListBehavior.SortByMostOccurrences Or FarPoint.Web.Spread.FilterListBehavior.Default)
    Dim hf As New FarPoint.Web.Spread.HideRowFilter(FpSpread1.Sheets(0))
    hf.AddColumn(fcd)
    FpSpread1.Sheets(0).RowFilter = hf
  End Sub
回避方法
2006/10/15版で修正済み。
それ以前のバージョンでは、次の回避策が有効です。

ソート後にフィルタリングを再度行って対応します。

  Dim sortFLG As Boolean

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Page.IsPostBack Then
      Return
    End If

    FpSpread1.ActiveSheetView.RowCount = 20
    FpSpread1.ActiveSheetView.ColumnCount = 3
    FpSpread1.ActiveSheetView.PageSize = 20

    Dim r As Random = New Random(DateTime.Now.Hour * DateTime.Now.Minute * DateTime.Now.Second + DateTime.Now.Millisecond)

    Dim i As Integer
    Dim j As Integer

    For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
      For j = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
        ' ランダムな数値データを設定します
        FpSpread1.ActiveSheetView.Cells(i, j).Value = r.Next(0, 5)
      Next j
    Next i

    FpSpread1.ActiveSheetView.AllowSort = True

    Dim fcd As New FarPoint.Web.Spread.FilterColumnDefinition(0, FarPoint.Web.Spread.FilterListBehavior.SortByMostOccurrences Or FarPoint.Web.Spread.FilterListBehavior.Default)
    Dim hf As New FarPoint.Web.Spread.HideRowFilter(FpSpread1.Sheets(0))
    hf.AddColumn(fcd)
    FpSpread1.Sheets(0).RowFilter = hf

    sortFLG = False
  End Sub

  Private Sub FpSpread1_SortColumnCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.SortColumnCommand
    sortFLG = True
  End Sub

  Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender
    ' ソートされた場合はフィルタリングし直します
    If sortFLG Then
      Dim hf As FarPoint.Web.Spread.IRowFilter
      hf = FpSpread1.ActiveSheetView.RowFilter
      FpSpread1.ActiveSheetView.AutoFilterColumn(0, hf.GetColumnFilterBy(0))

      sortFLG = False
    End If
  End Sub
キーワード
SPRN05774

この文書は、以前は次のバグレポートIDで公開されていました : 6414