索引值仍然为0

时间:2012-03-20 15:35:35

标签: asp.net vb.net ticker

为什么'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

2 个答案:

答案 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

  • 应用
  • 缓存
  • 表格发布/隐藏表格字段
  • 查询字符串
  • 会话
  • ASP.NET中的新状态容器
  • 高速缓存
  • 上下文
  • 视图状态
  • Web.config和Machine.config文件

答案 1 :(得分:0)

GridView中的行数是多少?

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

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

还断开方法并看看会发生什么,逐步执行代码并检查所有变量的值等。