2011-06-27 11 views
1

グリッドビューの「更新」ボタンをクリックすると、RowUpdatingイベントが発生しますが、「インデックスが範囲外です。 。コレクションのサイズパラメータ名:インデックス」Gridview RowUpdatingエラー - インデックスが範囲外です

次は、VBのコードです:

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) 
    If e.RowIndex >= 0 Then 

     Dim row As GridViewRow = DirectCast(Gridview1.Rows(e.RowIndex), GridViewRow) 
     Dim Col1_SL As CheckBox = DirectCast(row.FindControl("cb1_SL"), CheckBox) 

.................  

     Dim cmd As New System.Data.SqlClient.SqlCommand 
     Dim sql As String 
     Dim reader As System.Data.SqlClient.SqlDataReader 

     Using conn As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("hris_shiftdutyConnectionString").ConnectionString) 
      conn.Open() 
      cmd.Connection = conn 
      sql = "SET DATEFORMAT dmy;UPDATE troster SET SL='" & Convert.ToInt32(Col1_SL.Checked) & "' where roster_key='" & Col1_RosterKey.Text & "';" 
      cmd.CommandText = sql 
      reader = cmd.ExecuteReader() 
      conn.Close() 
      reader.Close() 
     End Using 

     'Reset the edit index. 
     Gridview1.EditIndex = -1 

     'Bind data to the GridView control. 
     BindData() 
    End If 

End Sub 

助けてください。 ViewStateは無効になっていると、ページがポストバックされていないだけでデータバインディングしているので感謝 ジョー

+0

コントロールのビューステートが有効になっていますか?ページがポストバックされていないときにのみGridViewをデータバインドしていますか? – rsbarro

+0

私のgridviewで、私はViewstateを無効にしていましたEnableViewState = "False"とpage_loadで私はそれが投稿されていない場合にGridviewをバインドします(If IsPostBackならば) –

+0

ViewStateを有効にすると、 viewstateがロードされているコントロールツリーは、前回の要求時にビューステートを保存するために使用されたコントロールツリーと一致する必要があります。 [更新]ボタンをクリックすると表示されます。だから私はそれを設定する必要があります=偽 –

答えて

1

は、この行は常に失敗するつもりです:

Dim row As GridViewRow = DirectCast(Gridview1.Rows(e.RowIndex), GridViewRow)

Gridview1.Rowsのカウントが起こっているよう0に設定する

ページがサーバーにポストバックされるとき、ASP.NETは、コントロールを再作成し、発生させるイベントを適切に決定し、どのコントロール値が変更されたか、 ViewStaを有効にする必要がありますあなたはコントロールツリーエラーの原因を突き止める必要があります。コード内で何らかの他の変更が行われている必要があります。

ページがポストバックされていないときにGridViewをPage_Loadにバインドするだけのデータは正しいが、コントロールでViewStateを有効にしない限り、イベントを適切に処理できないことに注意してください。

+0

ありがとう、私はenableviewstateをtrueに設定しました。インデックスが範囲外のエラーを修正しました。 しかし、RowUpdatingイベントを実行すると、上位行のデータが取得されます。 たとえば、2番目の行(e.rowindex = 1)を編集しますが、1番目の行(e.rowindex = 0)の値を取得します。 –

関連する問題