Pergunta

Eu estou convertendo a funcionalidade de um Gridview asp.net a um Listview. No gridview quando o item selecionado mudou Eu iria pegar um valor de uma etiqueta na linha selecionada e escrevê-lo a um fora rótulo diferente do gridview.

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

Em um Listview, não existe um conceito de "selectedRow", mas um SelectedItem. No entanto, você não pode fazer FindControl contra o item selecionado. Quando eu tento fazer o seguinte (eu recebo uma exceção de referência 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

Alguém sabe o caminho para encontrar um controle dentro do modelo de item selecionado?

Foi útil?

Solução

Você está chamando FindControl em todo o ListView, em vez de apenas o item selecionado. Isso deve funcionar:

Dim lblModuleTitle As Label = CType(listviewModules.Items(listviewModules.SelectedIndex).FindControl("lblModuleTitle"), Label)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top