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