为什么'index'总是返回值0虽然代码运行并且有一个语句'index = index + 1'?
'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值。
--- --- ADDITION
我有一个名为'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 :(得分: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
答案 1 :(得分:0)
GridView中的行数是多少?
如果网格中没有行,此行将始终将索引整数设置为0.
If index > GridView1.Rows.Count Then index = 0
还断开方法并看看会发生什么,逐步执行代码并检查所有变量的值等。