编辑gridview时出错

时间:2014-08-18 09:56:04

标签: c# asp.net gridview

我的网格视图包含修改删除

当我点击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>

1 个答案:

答案 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。