2012-03-20 70 views
1

为什么'索引'总是返回值0,尽管报价器正在运行并且存在'索引=索引+ 1'的语句?索引值仍然为0

'Dim index as integer = 0 
'EDIT 
Dim GridRowIndex as integer 

Protected Sub TickerAnnouncement_Tick(sender As Object, e As System.EventArgs) Handles TickerAnnouncement.Tick 
    lblAnnouncementFooter.Text = GridView1.Rows(index).Cells(0).Text 
    'index = index + 1 

    If GridRowIndex> GridView1.Rows.Count Then GridRowIndex = 0 
End Sub 

我已将打勾打开,但索引仍然返回0值。

---加成---

我有一个叫做 'IndexValue' 属性:

Public Property IndexValue() As Integer 
    Get 
     Dim s As Integer = DirectCast(ViewState("GridRowIndex"), Integer) 
     Return If(ViewState("GridRowIndex") Is Nothing, 0, CInt(ViewState("GridRowIndex")) + 1) 
    End Get 
    Set(value As Integer) 
     ViewState("GridRowIndex") = value 
    End Set 
End Property 
+0

您是否确定该语句实际执行?你是怎么确定的?你有没有机会声明一个名为'index'的局部变量?右键单击本地'index'变量并选择“转到定义”。它跳到哪里? – 2012-03-20 15:38:20

+0

这是什么,Winforms,ASP.NET,WPF,...?如果它是ASP.NET,那么显然为什么它总是0.所有变量,控件(包括页面本身)都会在页面呈现给客户端时立即处理(HTTP是无状态的)。 – 2012-03-20 15:38:50

+0

@KonradRudolph:执行了所有语句,但仅从GridView1返回了行(0)的值。 – 2012-03-20 15:40:29

回答

2

Timer.Tick的值将导致回发。所有属于页面的对象(成员变量,控件等)都放置在页面生命周期的末尾。所以当它呈现给客户端时,它不再存在于服务器的内存中。 HTTP无状态。因此,每个变量(或动态创建的控件)都必须在回发中重新初始化/重新创建。这就是为什么你的index总是0.

所以你需要将它存储在其他地方。我会建议ViewState

ViewState["GridRowIndex"] = ViewState["GridRowIndex"] == null ? 0 : (int)ViewState["GridRowIndex"]+1; 

编辑

我刚刚意识到这是一个问题,VB.NET,对不起。

声明这个属性:

Public Property IndexValue() As Integer 
    Get 
     If ViewState("GridRowIndex") Is Nothing Then ViewState("GridRowIndex") = 0 
     Return DirectCast(ViewState("GridRowIndex"), Int32) 
    End Get 
    Set(value As Integer) 
     ViewState("GridRowIndex") = value 
    End Set 
End Property 

然后将其设置在事件处理程序:

Protected Sub TickerAnnouncement_Tick(sender As Object, e As System.EventArgs) Handles TickerAnnouncement.Tick 
    lblAnnouncementFooter.Text = GridView1.Rows(IndexValue).Cells(0).Text 
    IndexValue += 1 
    If IndexValue >= GridView1.Rows.Count Then IndexValue = 0 
End Sub 

你会发现关于如何在这里回传仍然存在变量的所有选项的完整列表:http://msdn.microsoft.com/en-us/magazine/cc300437.aspx

  • 应用程序
  • 块饼干
  • 表单提交/隐藏的表单字段
  • 查询字符串
  • 会议
  • 新州集装箱在ASP.NET
  • 缓存
  • 语境
  • 的ViewState
  • Web.config中和机。config文件
+0

感谢您的代码。但我仍然陷入困境。请参阅上面的代码(我已编辑),我是否将代码放在正确的位置?我对使用ViewState – 2012-03-20 16:05:32

+0

@ mrjimoy_05不是很熟悉:我刚刚意识到您需要VB.NET,请参阅我的编辑。 – 2012-03-20 16:13:46

+0

这是工作,谢谢。但是,在到达gridview最大行后,索引值不会返回到0值。所以它卡在最大的行上,例如gridview上的总行数是3,在我执行代码后,它会得到1,2,3,然后卡住(我希望它总是重新发生,1,2,3,1,2,3,...)。 ..) – 2012-03-20 16:23:22

0

什么是你的GridView的行数?

如果网格中没有行,此行将始终将索引整数设置为0。

If index > GridView1.Rows.Count Then index = 0 

而且断点的方法,看看会发生什么,逐步执行代码,并检查所有的变量等

+0

网格中有一些行。 这段代码的目的是让数据从gridview中获取的新闻发布代码 – 2012-03-20 15:43:53

相关问题