2012-08-13 59 views
0

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

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上方悬停在页页次它说,它是0.如果我再进入我的监视窗口,并在它(再次0)看,然后去回到我的代码并再次悬停它是2(它应该是)!然后我可以继续经过中断点,页面显示在页面2上。然而,这就是它变得非常奇怪的地方,如果我删除了断点并运行它,我最终将在第1页!所以它就好像PageCount没有更新,除非我在它上面放置了一个断点并专门查看了它。任何人都可以解释这种行为以及如何解决这个问题?

UPDATE

这里是有问题的变量的值的照片。您可以看到PageIndex未更新,因为它从未进入IF声明,因为PageCount早于0的时刻!我不能是唯一一个由这个难住了:变量值/

图片:enter image description here

回答

0

OK位哈克但有用。简单使用;

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

无法获取GridView.PageCount等于2,除了通过进入WatchWindow并刷新值字段(将很难解释给你每天的在线用户该怎么做,这样是不是真的一个选项:P)。所以我试着把它放弃。现在工作正常。可能会遇到一个页面不存在错误,但我想这是不太可能的,因为页面数量根本没有改变,Session("CurrecntPage")变量定期更新。

1

我猜你可能需要投你的会话值到整数

If Not Session("CurrentPage") Is Nothing AndAlso 
       DirectCast(Session("CurrentPage"), 
              Integer) <= GridView1.PageCount Then 
     GridView1.PageIndex = DirectCast(Session("CurrentPage"),Integer) 
    End If 
+0

作为一个后续,如果OP使用'Option Strict On',这将是一个好主意。 – 2012-08-13 18:05:52

+0

嗯,不行,问题在于我的PageCount,它仍然是0.更改我的currentPage类型不会影响它。 – windowskm 2012-08-16 09:15:33