1

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

- -添加 - -

我有一个名为“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
4

2 回答 2

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 文件
于 2012-03-20T15:42:06.777 回答
0

GridView 中的行数是多少?

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

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

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

于 2012-03-20T15:38:39.777 回答