Apollo
Apollo

Reputation: 2070

RowDataBound Object Not Set to an Instance of an Object

I have a gridview that works fine, but gives me the error "Object Not Set to An Instance of An Object when Edit Clicked.

I believed is because my labels in my gridview are null when in edit mode and this is what causes the problem , but I have no idea how to solve this.

              <asp:BoundField DataField="Received" HeaderText="Received" SortExpression="Received"
                        ReadOnly="true">
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                    <asp:TemplateField HeaderText="Complete" SortExpression="Complete">                            
                        <ItemTemplate>
                            <asp:Label ID="lblComplete" runat="server" Text='<%# Bind("Complete") %>'></asp:Label>
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>
                    <asp:BoundField DataField="TransTime" HeaderText="Trans. Time" SortExpression="TransTime"
                        ReadOnly="true">
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:BoundField>
                    <asp:TemplateField ShowHeader="False">
                        <ItemTemplate>
                            <asp:LinkButton ID="lbClose" runat="server" CausesValidation="False" CommandName="CloseClicked" Text ="Close"
                                OnClick="CloseClick_Click">Close</asp:LinkButton>
                            <asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="EditRow"  Text =""
                                OnClick="Edit_Click" CommandArgument='<%# Eval("TicketId")%>'>Edit</asp:LinkButton>
                            <asp:LinkButton ID="lbDelete" runat="server" CausesValidation="False" CommandName="DeleteRow"  Text =""
                                OnClick="Delete_Click">Delete </asp:LinkButton>


                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:LinkButton ID="lbUpdate" runat="server" CausesValidation="True" CommandName="UpdateRow"
                                ForeColor="White" Text="Update" CommandArgument='<%# Eval("TicketId")%>'></asp:LinkButton>
                            <asp:LinkButton ID="lbCancel" runat="server" CausesValidation="False" CommandName="CancelUpdate"
                                ForeColor="White" CommandArgument='<%# Eval("TicketId")%>' Text="Cancel"></asp:LinkButton>
                        </EditItemTemplate>
                        <FooterStyle HorizontalAlign="Center" />
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>
                </Columns>
                <EditRowStyle BackColor="#999999" />
                 />

            </asp:GridView>

RowCommand

    protected void gvData_RowCommand(object sender, GridViewCommandEventArgs e)
    {
           if (e.CommandName == "EditRow")
           {
               //This enables the EditTemplate
               int rowindex = ((GridViewRow)             ((LinkButton)e.CommandSource).NamingContainer).RowIndex;
                gvData.EditIndex = rowindex; //Enables the edit row in gridview                      
            }
    }

I get the error in lbClose.Enabled

  protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
 {
e.Row.Cells[0].Visible = false; 

if (e.Row.RowType == DataControlRowType.DataRow)
{
    LinkButton lbClose = (LinkButton)e.Row.Cells[5].FindControl("lbClose");
    LinkButton lbEdit = (LinkButton)e.Row.Cells[5].FindControl("lbEdit");
    LinkButton lbDelete = (LinkButton)e.Row.Cells[5].FindControl("lbDelete");


    var lblTrans = (Label)e.Row.FindControl("lblTrans");
    var lblComplete = (Label)e.Row.FindControl("lblComplete");               


    if (e.Row.Cells[3].Text == "")
    {
        lbClose.Enabled = true; //Error Here
        lbEdit.Enabled = true;
        lbDelete.Enabled = true;
    }
    else
    {
        lbClose.Enabled = false;
    }                       
}
}

Upvotes: 1

Views: 2990

Answers (2)

Cherian M Paul
Cherian M Paul

Reputation: 656

Those controls don't exist in EditMode because they are part of the ItemTemplate. Just Change the condition!

if (e.Row.RowType == DataControlRowType.DataRow & gvData.EditIndex != e.Row.RowIndex)

Upvotes: 0

Mike Perrenoud
Mike Perrenoud

Reputation: 67898

I believed is because my labels in my gridview are null when in edit mode and this is what causes the problem ...

OK, so you're saying that the problem arises when you enter EditMode on this row. And you're right, those controls don't exist in EditMode because they are part of the ItemTemplate. So just do this:

LinkButton lbClose = (LinkButton)e.Row.Cells[5].FindControl("lbClose");
if (lbClose == null) { return; }

If you can't find the control you know the state of the row and so the statements below don't matter.

Upvotes: 2

Related Questions