By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,231 Members | 1,636 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,231 IT Pros & Developers. It's quick & easy.

Maintain a DataTable between postbacks...

P: n/a
I have a DataTable from which I am trying to delete rows using the
DataGrid control. However, I'm having trouble maintaining the changes
to the DataTable between PostBacks. This is my first go 'round with
the DataGrid control, so pardon me if there are glaring mistakes...

public partial class control_panel_mail_Default : System.Web.UI.Page
{
private DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
dt = new DataTable();
LoadContacts();
}

private void LoadContacts()
{
if (!IsPostBack)
{
DataColumn dc;

dc = new DataColumn();
dc.ColumnName = "blog_contact_firstname";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "blog_contact_lastname";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "blog_contact_email";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

SqlConnection loConnection = new
SqlConnection(ConfigurationManager.AppSettings["Data_Connection_String"].ToString());
SqlDataAdapter loAdapter = new SqlDataAdapter("SELECT
blog_contact_firstname, blog_contact_lastname, blog_contact_email FROM
tbblog_contact WHERE blog_contact_deleted = 0 AND blog_contact_optout =
0 ORDER BY blog_contact_firstname", loConnection);
loAdapter.Fill(dt);

gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}
else
{
dt = ViewState["ContactList"] as DataTable;
gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}
}

protected void gvRecipientList_RowDeleting(Object sender,
GridViewDeleteEventArgs e)
{
DataRow dr = dt.Rows[e.RowIndex];
dt.Rows.Remove(dr);
ViewState.Add("ContactList", dt);
}
}

It fails on the statement:
DataRow dr = dt.Rows[e.RowIndex];
stating that the object reference not set to an instance of an
object... This happens even on the very first PostBack after the
initial load of the page.

Thanks in advance!
Jason

May 10 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
I might be wrong...

The first time when you do a postback, there is no ViewState["ContactList"]
yet it seems. when it gets to the deleting part, i imagine there is nothing
for it to delete.

You should add ViewState.Add("ContactList", dt) into your
if(!Page.IsPostBack) block.


"Jason" <ja*************@hotmail.com> wrote in message
news:11**********************@q12g2000cwa.googlegr oups.com...
I have a DataTable from which I am trying to delete rows using the
DataGrid control. However, I'm having trouble maintaining the changes
to the DataTable between PostBacks. This is my first go 'round with
the DataGrid control, so pardon me if there are glaring mistakes...

public partial class control_panel_mail_Default : System.Web.UI.Page
{
private DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
dt = new DataTable();
LoadContacts();
}

private void LoadContacts()
{
if (!IsPostBack)
{
DataColumn dc;

dc = new DataColumn();
dc.ColumnName = "blog_contact_firstname";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "blog_contact_lastname";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "blog_contact_email";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

SqlConnection loConnection = new
SqlConnection(ConfigurationManager.AppSettings["Data_Connection_String"].ToString());
SqlDataAdapter loAdapter = new SqlDataAdapter("SELECT
blog_contact_firstname, blog_contact_lastname, blog_contact_email FROM
tbblog_contact WHERE blog_contact_deleted = 0 AND blog_contact_optout =
0 ORDER BY blog_contact_firstname", loConnection);
loAdapter.Fill(dt);

gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}
else
{
dt = ViewState["ContactList"] as DataTable;
gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}
}

protected void gvRecipientList_RowDeleting(Object sender,
GridViewDeleteEventArgs e)
{
DataRow dr = dt.Rows[e.RowIndex];
dt.Rows.Remove(dr);
ViewState.Add("ContactList", dt);
}
}

It fails on the statement:
DataRow dr = dt.Rows[e.RowIndex];
stating that the object reference not set to an instance of an
object... This happens even on the very first PostBack after the
initial load of the page.

Thanks in advance!
Jason

May 10 '06 #2

P: n/a
You are correct. When the page is initially loaded, (!IsPostBack) is a
true condition, so, it grabs the information from the database. That
is obvious because the GridView is populated with the correct data upon
initial load.

But, it is when you enter gvRecipientList_RowDeleting for the first
time, it's saying that "dt" is not set to an instance of an object.
That's what I'm not understanding at the moment...

May 10 '06 #3

P: n/a
So did it work for you or ..?

1. First time enter in the page, gridview binded directly to the data from
db.
2. PostBack, Gridview binded to a null ViewState object, so did "dt".
3. Enter gvRecipientList_RowDeleting, you try to retrieve "dt".Rows... but
"dt" is null at this time.
"Jason" <ja*************@hotmail.com> wrote in message
news:11**********************@u72g2000cwu.googlegr oups.com...
You are correct. When the page is initially loaded, (!IsPostBack) is a
true condition, so, it grabs the information from the database. That
is obvious because the GridView is populated with the correct data upon
initial load.

But, it is when you enter gvRecipientList_RowDeleting for the first
time, it's saying that "dt" is not set to an instance of an object.
That's what I'm not understanding at the moment...

May 10 '06 #4

P: n/a
I don't know if this is a proper solution, but I got this to work:

public partial class control_panel_mail_Default : System.Web.UI.Page
{
private DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
dt = new DataTable();
if (!IsPostBack)
{
LoadContacts();
}
else
{
dt = ViewState["ContactList"] as DataTable;
}
ViewState.Add("ContactList", dt);
gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}

private void LoadContacts()
{
DataColumn dc;

dc = new DataColumn();
dc.ColumnName = "blog_contact_firstname";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "blog_contact_lastname";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "blog_contact_email";
dc.DataType = System.Type.GetType("System.String");
dt.Columns.Add(dc);

SqlConnection loConnection = new
SqlConnection(ConfigurationManager.AppSettings["Data_Connection_String"].ToString());
SqlDataAdapter loAdapter = new SqlDataAdapter("SELECT
blog_contact_firstname, blog_contact_lastname, blog_contact_email FROM
tbblog_contact WHERE blog_contact_deleted = 0 AND blog_contact_optout =
0 ORDER BY blog_contact_firstname", loConnection);
loAdapter.Fill(dt);

gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}

protected void gvRecipientList_RowDeleting(Object sender,
GridViewDeleteEventArgs e)
{
dt = ViewState["ContactList"] as DataTable;
dt.Rows.Remove(dt.Rows[e.RowIndex]);
ViewState.Add("ContactList", dt);
gvRecipientList.DataSource = dt;
gvRecipientList.DataBind();
}
}

May 11 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.