0

真的很奇怪......所以我试图将我的gridview的页面索引保存在会话变量中,然后在用户导航回gridView时重置索引。下面是我的代码;

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

奇怪的是,当我在上面的第二个 IF 上断点并将鼠标悬停在 pageCount 上时,它说它是 0。如果我然后进入我的监视窗口并查看它(再次为 0),然后返回我的代码并再次悬停它是 2(应该是)!然后我可以继续越过断点,页面将按原样显示在第 2 页上。然而,这就是它变得非常奇怪的地方,如果我删除断点并运行它,我最终会在第 1 页!所以它好像PageCount没有更新,除非我在它上面放了一个断点并专门查看它。任何人都解释了这种行为以及如何解决它?!

更新

这是相关变量值的图片。您可以看到 PageIndex 没有更新,因为它从未进入IF语句,因为之前的 PageCount 为 0!我不能是唯一一个被这个难住的人:/

变量值的图像:在此处输入图像描述

4

2 回答 2

1

我想您可能需要将 Session 值转换为 Integer

    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

好的有点hacky,但它的工作原理。简单使用;

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

无法让 GridView.PageCount 等于 2,除非进入 WatchWindow 并刷新 value 字段(很难向您的日常在线用户解释如何做到这一点,因此这不是一个真正的选择:P)。所以我试着把它排除在外。现在工作正常。可能会遇到页面不存在错误,但我认为这不太可能,因为页面数量根本没有太大变化,并且Session("CurrecntPage")变量会定期更新。

于 2012-08-16T14:29:31.153 回答