在RowDataBound事件期间,我无法以更有效的方式使用FindControl

时间:2016-05-19 03:05:34

标签: asp.net vb.net

我正在努力从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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我明白了。

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

 If e.Row.RowType = DataControlRowType.DataRow Then 

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