This solution applies to ASP.NET and is not applicable to this question
Please pay attention to the solution from Sergey Alexandrovich Kryukov regarding the terminology. It does help get questions answered a lot quicker.
Also, Maciej Los makes an excellent point regarding how you should handle data changes in your applications. Making sure you use objects and data as they are intended to be used will make your life soo much easier in the long run.
Neither of these solutions answer your question, But I suggest accepting them as well as this solution as they are valid points regarding your question.
Control events occur AFTER the page has been redrawn. If you change data at this stage then it is too late to have that data change shown on the page.
A simple way to get around this is to wrap your control in an UpdatePanel. This allows you to fire an event BEFORE the page is redrawn. ALSO it has the added bonus of being a partial-postback so the whole page doesn't have to reload every time.
There are more elegant solutions, but this is the simplest:
<asp:Button runat="server" ID="btnButton1" Text="button"/>
<asp:UpdatePanel runat="server" ID="upGrid" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<div>
<my grid and stuff to be updated/>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnButton1" EventName="Click"/>
</Triggers>
</asp:UpdatePanel>
What this does is pretty cool:
1: The page is posted back to the server using an AJAX method
2: Your event runs (the button click)
3: You call upGrid.Update() from the server (only if you don't specify the trigger, though)
4: The server renders the content template with the new data
5: The server response to the AJAX with the new html
6: The client rewrites the contenttemplate with the new HTML
Try it. Let me know if you get stuck :D