0

ネストされたリピーターがあり、ネストされたリピーターの各アイテムにはラベルとボタンがあります。ボタンがクリックされたときに label.text にアクセスできるようにしたいのですが、インデックスを返すことができるので、ほぼそこにいると思いますクリックされたリピーターとネストされたリピーター、ラベル自体を見つけるのに苦労しています。

私がリピーターコードを投稿しなくても、あなたは私を助けることができるかもしれません. ボタンがクリックされたときの私のコードビハインドは次のとおりです。

Protected Sub btnEditUser_Click(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim btnEditUser As Button = DirectCast(sender, Button)
    Dim reClient As RepeaterItem = DirectCast(btnEditUser.NamingContainer.Parent.Parent, RepeaterItem)
    Dim reUser As RepeaterItem = DirectCast(btnEditUser.NamingContainer, RepeaterItem)
    Dim selectedClient As Integer = reClient.ItemIndex
    Dim selectedUser As Integer = reUser.ItemIndex

    Dim UserId As Label = DirectCast(reClients.Items(selectedClient).FindControl("lUserName"), Label)

    Response.Write(selectedClient & " " & selectedUser & " " & UserId.Text)

End Sub

現在、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。UserId.Text の値を書き込もうとすると、この行で少し間違っていると思います:

Dim UserId As Label = DirectCast(reClients.Items(selectedClient).FindControl("lUserName"), Label)
4

2 に答える 2

0

これは単なる推測ですが、探しているコントロールがすべての行に含まれているとは限らない場合、このようなエラーが発生することがあります。多くの場合、コードは行を順番にループし、関連するコントロールを含まないヘッダー行に最初にヒットし、失敗します。

于 2011-10-14T11:38:29.937 に答える
0

これは、MSDN の優れた記事です - Locating a Control Inside a Hierarchy of Naming containersです。

Private Function FindControlRecursive(
    ByVal rootControl As Control, ByVal controlID As String) As Control

    If rootControl.ID = controlID Then
        Return rootControl
    End If

    For Each controlToSearch As Control In rootControl.Controls
        Dim controlToReturn As Control = 
            FindControlRecursive(controlToSearch, controlID)
        If controlToReturn IsNot Nothing Then
            Return controlToReturn
        End If
    Next
    Return Nothing
End Function

それを試してみてください、

Dim UserId As Label =DirectCast(FindControlRecursive(repClient,"lUserName"),Label)
于 2011-10-14T11:40:55.857 に答える