0

本当に奇妙です...だから、グリッドビューのページインデックスをセッション変数に保存し、ユーザーがグリッドビューに戻ったときにインデックスをリセットしようとしています。以下は私のコードです。

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs)
    If Not Page.IsPostBack Then
        If Not Session("CurrentPage") Is Nothing AndAlso 
Session("CurrentPage") <= GridView1.PageCount Then
            GridView1.PageIndex = Session("CurrentPage")
        End If
    End If
End Sub

奇妙なことに、上記の 2 番目の IF でブレークポイントを指定して pageCount にカーソルを合わせると、0 であると表示されます。その後、ウォッチ ウィンドウに移動して (もう一度 0) を確認すると、コードに戻ってもう一度カーソルを合わせます。それは2です(そうあるべきです)!次に、ブレーク ポイントを超えて続行すると、ページが 2 ページ目に表示されます。しかし、これが本当に奇妙なところです。ブレークポイントを削除して実行すると、最終的にページ 1 になります。そのためPageCount、ブレークポイントを設定して具体的に調べない限り、更新されていないようです。誰かがこの動作とそれを回避する方法を説明していますか?!

アップデート

問題の変数の値の写真を次に示します。IF少し前に PageCount が 0 だったため、ステートメントに入力されなかったため、PageIndex が更新されていないことがわかります。これに困惑しているのは私だけではありません:/

変数値のイメージ:ここに画像の説明を入力

4

2 に答える 2

1

セッション値を整数にキャストする必要があるかもしれません

    If Not Session("CurrentPage") Is Nothing AndAlso 
               DirectCast(Session("CurrentPage"),
                                           Integer) <= GridView1.PageCount Then
         GridView1.PageIndex = DirectCast(Session("CurrentPage"),Integer)
    End If
于 2012-08-13T15:58:28.007 に答える
0

少しハッキーですが、動作します。単純に使用されます。

If Not Session("CurrentPage") Is Nothing Then
    GridView1.PageIndex = DirectCast(Session("CurrentPage"), Integer)
End If

GridView.PageCount を 2 に等しくするには、WatchWindow に移動して値フィールドを更新する以外はできませんでした (日常のオンライン ユーザーにその方法を説明するのは難しいため、実際にはオプションではありませんでした:P )。だから私はそれをそのままにしてみました。今は正常に動作します。ページが存在しないというエラーが発生する可能性がありますが、ページ数はほとんど変化せず、Session("CurrecntPage")変数は定期的に更新されるため、その可能性はほとんどないと思います。

于 2012-08-16T14:29:31.153 に答える