Indice fuori del campo Errore di quando si utilizza row.FindControl all'interno di un evento rowcommand Asp.net GridView con paginazione Abilitato
-
09-09-2019 - |
Domanda
Il seguente codice funziona alla grande su Pagina 1 di dati all'interno di un controllo GridView Asp.net:
If e.CommandName = "Void" Then
'Read the status of the ticket currently
Dim RowIndex As Integer = CInt(e.CommandArgument)
Dim row As GridViewRow = grdTradeTickets.Rows(RowIndex)
Dim lblTransactionID As Label = DirectCast(row.FindControl("lblTransactionID"), Label)
Dim lblTtStatus As Label = DirectCast(row.FindControl("lblTtStatus"), Label)
Dim lblTradeTicketID As Label = DirectCast(row.FindControl("lblTradeTicketID"), Label)
'If already void, show "Already Void" message to user. Else continue "Are you sure you want to void this Trade Ticket?"
If lblTtStatus.Text = "Void" Then
mdlPopupAlready.show()
Else
mdlPopup.Show()
lblTradeTicketIdToVoid.Text = lblTradeTicketID.Text
End If
End If
Tuttavia, se l'utente fa clic sul pulsante "Void" in ogni pagina successiva, è gettato il seguente errore:
"indice era fuori portata Deve essere non negativo e inferiore alla dimensione della collezione Nome del parametro:.. Indice"
Non è come l'indice è nullo o qualcosa del genere. Ha un valore. Pensieri?
Soluzione
Provare a sostituire le linee:
Dim RowIndex As Integer = CInt(e.CommandArgument)
Dim row As GridViewRow = grdTradeTickets.Rows(RowIndex)
con
Dim row As GridViewRow = DirectCast(DirectCast(e.CommandSource, Control).Parent.Parent, GridViewRow)
Altri suggerimenti
stavo affrontando lo stesso problema. Poi si è rivelato essere il problema con SubString Method (). Quello che stavo facendo mi è stato sempre la sottostringa da una stringa utilizzando indice. Come
MyString.Substring (3, 6);
e in myString, ero di passaggio "abc" si intende la stringa di lunghezza era 3. Cercare un codice che sta utilizzando stringa o la raccolta e cercare di eseguire il debug. Acclamazioni:)