1

ティッカーが実行されていて、ステートメント'index = index + 1'があるのに、なぜ'index'は常に値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
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の新しい状態コンテナー
  • キャッシュ
  • コンテクスト
  • ViewState
  • 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 に答える