Encuentre un control en Asp.net Listview dentro de la plantilla del elemento seleccionado
Pregunta
Estoy convirtiendo la funcionalidad de una vista de cuadrícula de asp.net a una vista de lista. En la vista de cuadrícula cuando el elemento seleccionado cambió, tomaría un valor de una etiqueta en la fila seleccionada y lo escribiría en una etiqueta diferente fuera de la vista de cuadrícula.
Protected Sub grdModules_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdModules.SelectedIndexChanged
Dim lblModuleTitle As Label = grdModules.SelectedRow.FindControl("lblModuleTitle")
lblCurrentModule.Text = lblModuleTitle.Text
End Sub
En una vista de lista, no hay un " SelectedRow " concepto, pero un artículo seleccionado. Sin embargo, no puede hacer findcontrol contra el elemento seleccionado. Cuando trato de hacer lo siguiente (obtengo una excepción de referencia nula):
Protected Sub listviewModules_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles listviewModules.SelectedIndexChanged
Dim lblModuleTitle As Label = CType(listviewModules.FindControl("lblModuleTitle"), Label)
lblCurrentModule.Text = lblModuleTitle.Text
End Sub
¿Alguien sabe cómo encontrar un control dentro de la plantilla del elemento seleccionado?
Solución
Está llamando a FindControl en todo el ListView, en lugar de solo el elemento seleccionado. Esto debería funcionar:
Dim lblModuleTitle As Label = CType(listviewModules.Items(listviewModules.SelectedIndex).FindControl("lblModuleTitle"), Label)