索引值仍然为0
为什么'索引'总是返回值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
的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文件
感谢您的代码。但我仍然陷入困境。请参阅上面的代码(我已编辑),我是否将代码放在正确的位置?我对使用ViewState – 2012-03-20 16:05:32
@ mrjimoy_05不是很熟悉:我刚刚意识到您需要VB.NET,请参阅我的编辑。 – 2012-03-20 16:13:46
这是工作,谢谢。但是,在到达gridview最大行后,索引值不会返回到0值。所以它卡在最大的行上,例如gridview上的总行数是3,在我执行代码后,它会得到1,2,3,然后卡住(我希望它总是重新发生,1,2,3,1,2,3,...)。 ..) – 2012-03-20 16:23:22
什么是你的GridView的行数?
如果网格中没有行,此行将始终将索引整数设置为0。
If index > GridView1.Rows.Count Then index = 0
而且断点的方法,看看会发生什么,逐步执行代码,并检查所有的变量等
网格中有一些行。 这段代码的目的是让数据从gridview中获取的新闻发布代码 – 2012-03-20 15:43:53
您是否确定该语句实际执行?你是怎么确定的?你有没有机会声明一个名为'index'的局部变量?右键单击本地'index'变量并选择“转到定义”。它跳到哪里? – 2012-03-20 15:38:20
这是什么,Winforms,ASP.NET,WPF,...?如果它是ASP.NET,那么显然为什么它总是0.所有变量,控件(包括页面本身)都会在页面呈现给客户端时立即处理(HTTP是无状态的)。 – 2012-03-20 15:38:50
@KonradRudolph:执行了所有语句,但仅从GridView1返回了行(0)的值。 – 2012-03-20 15:40:29