Link to home
Start Free TrialLog in
Avatar of chris_desborough
chris_desboroughFlag for Australia

asked on

Problem deleting row from datatable

Experiencing a problem with deleting a row from a gridview bound to a datatable.

Get message: Object reference not set to an instance of an object on this line:

dtItems.Rows[e.RowIndex].Delete(); in the gvOrderSummary_RowDeleting method.
Gridview:
<asp:GridView ID="gvOrderSummary" runat="server" OnRowDeleting="gvOrderSummary_RowDeleting"
            OnRowDataBound="gvOrderSummary_RowDataBound" BackColor="White" BorderColor="#CCCCCC"
            BorderStyle="None" BorderWidth="1px" CellPadding="3" PageSize="100"  
            DataKeyNames="ID" AutoGenerateDeleteButton="True"  >
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="btnDelete" runat="server" Text="Del" CommandArgument='<%#DataBinder.Eval(Container,"DataItem.ID")%>'
                            CommandName="Delete"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <RowStyle ForeColor="#000066" />
            <FooterStyle BackColor="White" ForeColor="#000066" />
            <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
            <EmptyDataTemplate>
                There were no items in your order. Click the &#39;Start a New Order&#39; to continue.
            </EmptyDataTemplate>
            <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                   <HeaderStyle BackColor="#cccccc" HorizontalAlign="Left" ForeColor="Black" />
 
        </asp:GridView>
 
Code behind:
using System;
using System.Drawing;
using System.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;
using System.Text;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Configuration;
 
public partial class bob : System.Web.UI.Page
{
    static DataTable dtItems = null;
 
       
 
    protected void Page_Load(object sender, EventArgs e)
    {
 
        gvOrderSummary.DataSource = (DataTable)Session["dtItems"];
 
        gvOrderSummary.DataBind();
 
    }
 
    protected void btnSubmitOrder_Click(object sender, EventArgs e)
    {
        string redirectURL = "Stores.aspx?UserName=" + Request.QueryString["UserName"];
        Response.Redirect(redirectURL);
 
    }
 
    protected void btnNewOrder_Click(object sender, EventArgs e)
    {
        string redirectURL = "Stores.aspx?UserName=" + Request.QueryString["UserName"];
        Response.Redirect(redirectURL);
 
    }
 
    protected void gvOrderSummary_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
 
        GridViewRow deletedItem = gvOrderSummary.Rows[e.RowIndex];
 
        lblDeleted.Text = lblDeleted.Text + "Item deleted - " + deletedItem.Cells[3].Text + "<br />";
        Server.HtmlEncode(lblDeleted.Text);
 
        dtItems.Rows[e.RowIndex].Delete();
 
        //dtItems.AcceptChanges();
 
        gvOrderSummary.DataSource = dtItems;
        gvOrderSummary.DataBind();
 
    }
 
    protected void gvOrderSummary_RowDataBound(object s, GridViewRowEventArgs e)
    {
        // Hide the header of the leftmost column.
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[1].Visible = false;
        }
 
        // Hide the leftmost column of the data row.
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[1].Visible = false;
        }
    }
 
}

Open in new window

Avatar of mikeada
mikeada
Flag of United States of America image

dtIIems never gets set in your Page_Load

Likewise I don't see where it's getting saved to the session either.
Avatar of chris_desborough

ASKER

Okay, dtItems comes from a previous page - code here. Bit new to this stuff so bear with me. OrderSummary.aspx contains the Gridview code above.

 protected void lnkCheckOut_Click(object sender, EventArgs e)
    {
       
       Session["dtItems"] = dt;
       Response.Redirect("OrderSummary.aspx");
   
    }
ASKER CERTIFIED SOLUTION
Avatar of mikeada
mikeada
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Brilliant Mike. Works like a charm now.