public class MyPage : BasePage { //-- MyBO will be stored at session private MyBO _myBO = new MyBO(); private void Page_Load(Object sender, EventArgs e) { //-- this actually via ASP.NET inline markup and will refer to _myBO to show data this.Controls.Add(new MyDataGridView()); this._myBO.SomeEvent += this.MyBO_SomeEvent; } private void MyBO_SomeEvent() { // do something } } public class MyDataGridView : DataGridView { public MyDataGridView() { this.Templates.StatusBar = new StatusBarTemplate(this); } } public class StatusBarTemplate : ITemplate { private MyDataGridView _grid; private Button _button = new Button(); public StatusBarTemplate(MyDataGridView grid) { this._grid = grid; } public void InstantiateIn(Control container) { this.Controls.Add(this._button); this._button.DataBound += this.Button_DataBound; } public void Button_DataBound(Object sender, EventArgs e) { this._button.Enabled = this._grid.SomeMethod(); } }I use ANT profiler to trace the memory, and I found that some objects is not released (new object created) after every postback.