我的网格视图包含修改和删除。
当我点击gridview行中的编辑时,我在代码隐藏>后面的对象参考未设置为对象实例 :
Object reference not set to an instance of an object.
imgbtnEdit.Enabled = true;
任何人都可以帮我这个吗? 提前谢谢。
我对gridview的aspx是:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
ImageButton imgbtnEdit = (ImageButton)e.Row.FindControl("imgbtnEdit");
Label testing = (Label)e.Row.FindControl("testing");
if (!string.IsNullOrEmpty(testing.Text.ToString()))
{
imgbtnEdit.Enabled = true;
}
}
}
<asp:TemplateField>
<ItemTemplate>
<center>
<asp:ImageButton ID="imgbtnEdit" CommandName="Edit" runat="server" ImageUrl="/Images/icon.gif" Enabled="false" />
</center>
</ItemTemplate>
<EditItemTemplate>
<center>
<asp:ImageButton ID="imgbtnUpdate" CommandName="Update" runat="server" ImageUrl="/Images/update.gif" />
<asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="/Images/delete.gif" />
</EditItemTemplate>
</asp:TemplateField>
答案 0 :(得分:1)
<asp:TemplateField>
<ItemTemplate>
<center>
<asp:ImageButton ID="imgbtnEdit" CommandName="Edit" runat="server" ImageUrl="/Images/icon.gif" Enabled="false" /></center>
</ItemTemplate>
<EditItemTemplate>
<center>
<asp:ImageButton ID="imgbtnUpdate" CommandName="Update" runat="server" ImageUrl="/Images/update.gif" />
<asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="/Images/delete.gif" />
</EditItemTemplate>
</asp:TemplateField>
您的图片按钮imgbtnEdit位于ItemTemplate中。单击进行编辑时,将调用GridView1_RowEditing,并且GridView1中的行将进入“编辑模式”。当发生这种情况时,只会呈现EditItemTemplate中的内容,因此imgbtnEdit将不存在 - 这就是您获得空引用异常的原因。
编辑:我倾向于在名为isInEditMode的页面上设置变量,并在页面加载时将其设置为false。当调用rowEditing时,我会写一些类似的东西:
protected void GridView1_rowEditing(object sender, GridViewEditEventArgs e)
{
isInEditMode = true;
GridView1.EditIndex = e.NewEditIndex;
//rebind GridView1
}
并在rowdatabound中......
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (isInEditMode == true)
{
//get references to the controls in EditItemTemplates
}
else
{
//get references to the controls in ItemTemplates
}
}
这样您就不会尝试引用不存在的控件 - 具体取决于您是在查看还是编辑gridview。