force viewstate to clear on OnCommand event

J

J055

Hi

I have a number of nested repeater and placeholder controls. When a
LinkButton is clicked I delete a db record. I'm relying on viewstate quite a
lot so when a linkbutton's OnCommand event is rasied I'd like to remove the
record from the viewstate so that the rest of the page controls load from
there. Is that possible?

Thanks
Andrew
 
J

J055

OK, I think I want to clear the Parent repeater control which contains the
LinkButton. I only seem to be able to see the Repeater Item.

Something like this:

protected void btnRemove_Command(Object sender, CommandEventArgs e)

{

// delete record and clear LinkButton's parent Repeater

LinkButton btn = (LinkButton)sender;

btn.Parent.Parent.Clear();


}

Thanks
 
W

Walter Wang [MSFT]

Hi J055,

After I carefully reviewed your question, I'm still not quite clear about
it. Do you mean that you want to get the reference to the Repeater from a
LinkButton's Click event (the LinkButton resides in Repeater's template)?

If this is the case, you can turn on Trace in your @ Page directive and you
can see the control hierarchy. You will learn that the Repeater is
LinkButton.Parent.Parent.

To clear the repeater items, bind it to a null reference:

protected void link1_Click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)sender;
Repeater rpt = btn.Parent.Parent as Repeater;
rpt.DataSource = null;
rpt.DataBind();
}



Sincerely,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express, please make sure you clear the
check box "Tools/Options/Read: Get 300 headers at a time" to see your reply
promptly.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
J

J055

Hi Walter

Thanks for your reply. Actually I want to remove the RepeaterItem which is
the parent of the LinkButton. When the LinkButton command event is fired the
record is deleted from the database. The matching RepeaterItem row then
needs to be removed. If the deleted record was the last one then I need to
removed the whole repeater and a parent PlaceHolder.

The Repeater control has 2 Repeater ancestor controls which I don't want to
Re-bind if possible. Also I'm not sure how I could do this anyway.

Thanks again
Andrew
 
B

Brennan Stehling

J055,

I believe what are looking to do is trim the size of the ViewState as
data items are removed from the repeaters. And you want to do so
without pulling the data again and re-binding it.

Perhaps it takes a while to load the data so this is why you are trying
to avoid that overhead. What you can do is place a DataSet into the
Cache and set a SqlCacheDependency on it to ensure it stays current.

http://msdn2.microsoft.com/en-us/library/xsbfdd8c.aspx

When you do remove or update an item in the repeater you should adjust
the row in the DataSet and then have the changes committed back to the
database with the AcceptChanges method.

http://msdn2.microsoft.com/en-us/library/system.data.dataset.acceptchanges.aspx

This assumes you have set it up to work as a typed DataSet with insert,
update and delete functionality.

Here is another way to do it...

http://msdn2.microsoft.com/en-us/library/zky7370c.aspx

The example there shows how a typed DataSet manages the changes

Brennan Stehling
http://brennan.offwhite.net/blog/
 
B

Brennan Stehling

Of course once the changes for the DataSet are accepted successfully
you will want to set the DataSet as the DataSource on the repeater and
call DataBind on it.

Just be mindful of the SqlCacheDependency. If another user changes the
data which in in this DataSet you will need to manage that potential
conflict.

Brennan Stehling
http://brennan.offwhite.net/blog/
 
W

Walter Wang [MSFT]

Hi J055,

Sorry for the misunderstanding.

Since Repeater is designed to be used with data binding, I'm afraid it's
not possible to remove an individual RepeaterItem from Items without
re-binding the Repeater to the changed data source.

I think Brennan's suggestion is good if you have concern about the cost of
re-querying the data.

Regards,
Walter Wang ([email protected], remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

viewstate 0
Failed to load viewstate. 1
Failed to load viewstate. 1
Force Page Refresh 0
Failed to load viewstate 9
A Matter of Design: OnCommand or OnClick Event Handler? 0
Viewstate 2
Failed to load viewstate 0

Members online

Forum statistics

Threads
473,992
Messages
2,570,220
Members
46,807
Latest member
ryef

Latest Threads

Top