[thelist] dynamic tables and Page Life Cycle
Mark Joslyn
Mark.Joslyn at SolimarSystems.com
Mon Feb 25 12:00:58 CST 2008
Howdy List.
I am having a bit of trouble figuring out the best way to handle dynamically
created controls.
Here is what I have,
1. I connect to a web service that returns me a DataSet. I create a dynamic
table from the DataSet. The first row is the Header row which contains
LinkButtons (for sorting).
2. In the Page_Load event, I call a function called CreateTable() -
CreateTable() calls code in a separate class file (TableBuilder) that builds
the table, sets up click event delegates, etc.. Here is some of the
code-behind
private string _sortField
{
get { return (ViewState["SortField"] as string != null) ?
ViewState["SortField"] as string : String.Empty; }
set { ViewState["SortField"] = value; }
}
private bool _sortAsc
{
get { return (ViewState["SortAscending"] != null) ?
(bool)ViewState["SortAscending"] : false; }
set { ViewState["SortAscending"] = value; }
}
TableBuilder dataTable = new TableBuilder();
protected void Page_Load (object sender, EventArgs e)
{
// Create Jobs data table
CallCreateTable();
if (!Page.IsPostBack)
{
... other stuff ...
}
}
public void CreateTable()
{
// Create Table (this calls code in a separate class file (TableBuilder))
dataTable.createTable(_sortAsc, _sortField);
// Set up event handlers - from delegates in separate class file
dataTable.headerClick += new TableBuilder.ClickHandler(pagerClick);
}
protected void headerClick(object sender, EventArgs e)
{
// Toggle Sort Ascending Property (true:false) (ViewState)
_sortAsc = (_sortAsc == false) ? true : false;
// Set Sort Field Property to clicked header value (ViewState)
_sortField = oBtn.CommandArgument;
// Rebuild Jobs data table
CallCreateTable();
}
Here is where I am confused. The page loads fine - once I click the header
row link buttons, it loads fine still, but the web service is going to be
hit twice - once on the Page_Load event then once on the Click Event. That
is not a good thing - overhead, multiple calls, etc.. If I place the
CreateTable() call in a !isPostBack, the page loads fine the first time, but
once I click the link button, the table disappears. If I take the
CreateTable() call out of the headerClick function, then the sorting happens
on the second click instead of the first click.
So here is what I would like to figure out:
1. Where do I put the CreateTable() call?
2. Where do I set up my ClickEvent handlers?
3. Do I call CreateTable() in my headerClick function?
I have read about the Page Life Cycle, but I still cannot seems to place the
items I need in the right places.
Any help would be GREAT!!!!
Thanks,
markJ
More information about the thelist
mailing list