You have a couple of options. You could use the ASP.NET asynchronous page model. The idea would be that you load the data for each control asynchronously and then bind that data to each control as it is retrieved.
It would look something like this:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsAsync) {
dataSource.GetDataCompleted +=
new GetDataCompletedEventHandler(GetDataCompleted);
dataSource.GetDataAsync();
}
else {
_yourCtl.DataSource = dataSource.GetData();
_yourCtl.DataBind();
}
}
void GetDataCompleted(object sender, GetDataCompletedEventArgs e) {
_yourCtl.DataSource = e.Result;
_yourCtl.DataBind();
}
You would do the same for each control on the page. The end result is that the time to render the page will equal the time to render the slowest-rendering control.
An alternative method would be to use AJAX to load the controls. I'm not familiar with the Telerik RadGrid control, but I would assume that it supports AJAX. Here's a link to a Telerik demo page that shows how to perform programatic client-side binding of a Telerik grid: http://demos.telerik.com/aspnet-ajax/grid/examples/client/databinding/defaultcs.aspx.