你调用的对象是空的。 (gridview,按钮)

时间:2011-03-08 16:44:55

标签: asp.net vb.net

我一直收到此错误

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

4 个答案:

答案 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”?