我一直收到此错误
Object reference not set to an instance of an object.
我想要做的是当点击按钮时,我的面板可以看到他们点击的行的ID号的文本框。按id号,我的意思是列id,以及数据库给它的数字。
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
Dim button As Button = CType(e.Row.FindControl("button1"), Button)
Dim id As Label = CType(e.Row.FindControl("id"), Label)
button.OnClientClick = _
Panel1.Visible = True
Label2.Visible = True
Label2.Text = id.Text
UpdatePanel1.Update()
End Sub
答案 0 :(得分:3)
尝试添加以下条件以确保此时DataRow(而不是HeaderRow)是否正在处理:
If e.Row.RowType = DataControlRowType.DataRow Then
...
End If
答案 1 :(得分:1)
我怀疑你的问题可能来自
Dim id As Label = CType(e.Row.FindControl("id"), Label)
此行返回Nothing(因为它可能没有找到控件),然后您尝试访问其中一个属性
Label2.Text = id.Text
我不知道这条线试图
button.OnClientClick = _
但如果找不到控件,这也会导致同样的错误。
要解决您遇到的问题,我建议您不要这样做。但是为MyButtonClicked这样的方法设置Row的OnClick in按钮定义,处理此服务器端,您将能够确定发送命令的行,然后让您有逻辑隐藏/显示面板/文本框等
答案 2 :(得分:1)
很可能找不到您正在搜索的控件之一。
尝试以下操作,错误将告诉您哪一个找不到。
Dim button As Button = CType(e.Row.FindControl("button1"), Button)
if(button == null) throw new ApplicationException("button1 was not found");
Dim id As Label = CType(e.Row.FindControl("id"), Label)
if(id== null) throw new ApplicationException("id was not found");
NB *查找错误发生位置所需的所有信息都包含在异常详细信息中。查看行号的堆栈跟踪。如果每个程序员需要一种技能,就是能够正确读取异常并注意它们。
答案 3 :(得分:0)
在行中找不到您的两个控件之一。 Label
控件的ID是否真的“id”?