chris_desborough
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].D elete(); in the gvOrderSummary_RowDeleting method.
Get message: Object reference not set to an instance of an object on this line:
dtItems.Rows[e.RowIndex].D
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 'Start a New Order' 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;
}
}
}
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("OrderSu mmary.aspx ");
}
protected void lnkCheckOut_Click(object sender, EventArgs e)
{
Session["dtItems"] = dt;
Response.Redirect("OrderSu
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Brilliant Mike. Works like a charm now.
Likewise I don't see where it's getting saved to the session either.