2012-03-20 89 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

相關問題