我正在努力从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
我做错了什么?
答案 0 :(得分:0)
我明白了。
我在Dim语句之前添加了以下if语句,并将所有Dim语句更改为如下所示:
If e.Row.RowType = DataControlRowType.DataRow Then
Dim HFO2AD As String = DirectCast(e.Row.FindControl("HFO2AD"), HiddenField).Value