我无法在 RowDataBound 事件期间以更有效的方式查找控件



我正在从VB代码后面填充两个不同的标签。我目前正在处理这个问题,但我相信有一种更有效、更好的方法可以做到这一点。这是我唯一可以在不出现Null引用异常的情况下找到标签的方法。同样,这是有效的,但它所做的是多次遍历每一行(因为For each row…)

 Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound

    For Each Row As GridViewRow In GridView1.Rows
        Dim HFO1AD As String = DirectCast(Row.FindControl("HFO1AD"), HiddenField).Value
        Dim HFO2AD As String = DirectCast(Row.FindControl("HFO2AD"), HiddenField).Value
        Dim HFO3AD As String = DirectCast(Row.FindControl("HFO3AD"), HiddenField).Value
        Dim HFO4AD As String = DirectCast(Row.FindControl("HFO4AD"), HiddenField).Value
        Dim HFO5AD As String = DirectCast(Row.FindControl("HFO5AD"), HiddenField).Value
        Dim HFO6AD As String = DirectCast(Row.FindControl("HFO6AD"), HiddenField).Value
        Dim OfficialsAccepted As Label = DirectCast(Row.FindControl("OfficialsAcceptedlbl"), Label)
        Dim OfficialsNeeded As Label = DirectCast(Row.FindControl("OfficialsNeededlbl"), Label)
        Dim RowID As String = DirectCast(Row.FindControl("IDlbl"), HyperLink).Text
        Dim Cmd As SqlCommand
        Dim dr As SqlDataReader
        con.Open()
        Cmd = New SqlCommand("Select OfficialsNeeded From Schedule WHERE ID ='" + RowID + "'", con)
        dr = Cmd.ExecuteReader
        dr.Read()

        OfficialsNeeded.Text = dr(0).ToString
        con.Close()
        'Counting number of offiicials that have accepted
        Dim N As Integer = 0
        If HFO1AD = "Accept" Then
            N = N + 1
        End If
        If HFO2AD = "Accept" Then
            N = N + 1
        End If
        If HFO3AD = "Accept" Then
            N = N + 1
        End If
        If HFO4AD = "Accept" Then
            N = N + 1
        End If
        If HFO5AD = "Accept" Then
            N = N + 1
        End If
        If HFO6AD = "Accept" Then
            N = N + 1
        End If
        OfficialsAccepted.Text = N.ToString
    Next
End Sub

根据我所读到的,你要做的事情如下,但我得到了一个空引用异常(找不到控件)

Dim HFO1AD As String = DirectCast(e.Row.FindControl("HFO1AD"), HiddenField).Value

我做错了什么?

我想明白了。

我在Dim语句之前添加了以下if语句,并将所有Dim语句改回如下所示:

 If e.Row.RowType = DataControlRowType.DataRow Then 
 Dim HFO2AD As String = DirectCast(e.Row.FindControl("HFO2AD"), HiddenField).Value

最新更新