Jan 15, 2010, 7:27 PM
[CLOSED] Remote paging GridPanel
Hi
I have List<> with 350 rows. I am trying to implement remote paging and want to make sure that I am using correct steps.
Also I am creating store and gridpanel all in code-behind
I did not include all code in CreateGrid as it is quite large. My question is are these the steps to perform Remote Paging. My Code is working right now expect that CreateGrid is called twice when the form first starts. but My main concern is to get the pattern right for optimun load time.
1. Create Store
2. Set store.Autoload = True;
3. Set store.RemoteSort = true;
4. Set store.RemotePaging = true;
5. Set AutoLoadParams for start and limit
5a. Is it necessary to set store.BaseParams
6. Is it necessary to set store.Proxy.Add(new DataSourceProxy());
7. i think this is only needed if using HttpProxy
//((Coolite.Ext.Web.JsonReader)store.Reader[0]).TotalProperty = "TotalRecords";
//((Coolite.Ext.Web.JsonReader)store.Reader[0]).Root = "Data";
Right now with step 1 through 6, my page loads - calls CreateGrid() twice then fires GridRefresh event where the first 15 rows are returned. it stills takes about 8 seconds to render the grid - even though it is only 15 rows and 6 fields in store.
When I click on Page 2, CreateGrid() is called once and then Gridrefresh is called.
for my problem with creation of controls twice the first time, is it better to turn Autoload=false and do some kind of store.load(). what would be the best way to do this via code-behind.
thanks for your help
idriss
private Store store = null;
protected void Page_Load(object sender, EventArgs e)
{
CreateGrid(); // this is being called twice the first time the form loads
// which created the grid and store code-behind
}
private void CreateGrid()
{
GridPanel grid = null;
// used to set pager size limit in pager section and also in store.AutoLoadParams
int _limit = 15;
store = new Store { ID = "store1" };
ph1.Controls.Add(store);
store.RefreshAfterSaving = RefreshAfterSavingMode.Always;
store.AutoLoad = true;
store.RemoteSort = true;
store.RemotePaging = true;
store.AutoLoadParams.Add(new Parameter { Name="start", Value="0", Mode= ParameterMode.Raw});
store.AutoLoadParams.Add(new Parameter { Name = "limit", Value = _limit.ToString(), Mode = ParameterMode.Raw });
store.BaseParams.Add(new Parameter { Name = "start", Value = "0" });
store.BaseParams.Add(new Parameter { Name = "limit", Value = _limit.ToString() });
//store.BaseParams.Add(new Parameter { Name = "startRemote", Value = "={0}" });
//store.BaseParams.Add(new Parameter { Name = "limitRemote", Value = "={25}" });
store.Proxy.Add(new DataSourceProxy());
store.Listeners.LoadException.Handler = "var e = e || {message: response.responseText}; alert('Load failed: ' + e.message);";
store.Listeners.CommitFailed.Handler = "Ext.Msg.alert('Commit failed', 'Reason: ' + msg)";
store.Listeners.SaveException.Handler = "Ext.Msg.alert('Save failed', e.message || e)";
store.Listeners.CommitDone.Handler = "Ext.Msg.alert('Commit', 'Your data has been saved');";
store.Reader.Add(new JsonReader());
((Coolite.Ext.Web.JsonReader)store.Reader[0]).ReaderID = "reader1";
// i think this is only needed if using HttpProxy
//((Coolite.Ext.Web.JsonReader)store.Reader[0]).TotalProperty = "TotalRecords";
//((Coolite.Ext.Web.JsonReader)store.Reader[0]).Root = "Data";
//=================
// More code here to build grid
//==================
store.RefreshData += new Store.AjaxRefreshDataEventHandler(GridRefresh);
//store.BeforeStoreChanged += new Store.BeforeStoreChangedEventHandler(GridBeforeChanged);
store.BeforeRecordDeleted += new Store.BeforeRecordDeletedEventHandler(store_BeforeRecordDeleted);
Coolite.Ext.Web.RowSelectionModel sm = new RowSelectionModel { ID = "rowSelection", SingleSelect = true };
grid.SelectionModel.Add(sm);
}
public Paging<IFG.Data.NavRisk.Vehicles> ColPaging(int start, int limit, string sort, string dir, string filter)
{
List<IFG.Data.NavRisk.Vehicles> result = IFG.Data.RQController.GetVehicles(PolicyID);
//if (!string.IsNullOrEmpty(filter) && filter != "*")
//{
// contacts.RemoveAll(plant => !plant.FirstName.ToLower().StartsWith(filter.ToLower()));
//}
if (!string.IsNullOrEmpty(sort))
{
result.Sort(delegate(IFG.Data.NavRisk.Vehicles x, IFG.Data.NavRisk.Vehicles y)
{
object a;
object b;
int direction = dir == "DESC" ? -1 : 1;
a = x.GetType().GetProperty(sort).GetValue(x, null);
b = y.GetType().GetProperty(sort).GetValue(y, null);
return System.Collections.CaseInsensitiveComparer.Default.Compare(a, b) * direction;
});
}
if ((start + limit) > result.Count)
{
limit = result.Count - start;
}
List<IFG.Data.NavRisk.Vehicles> range = (start < 0 || limit < 0) ? result : result.GetRange(start, limit);
return new Paging<IFG.Data.NavRisk.Vehicles>(range, result.Count);
}
protected void GridRefresh(object sender, StoreRefreshDataEventArgs e)
{
Paging<IFG.Data.NavRisk.Vehicles> res = ColPaging(e.Start, e.Limit, e.Sort, e.Dir.ToString(), "");
Msg.Text += "GridRefresh BEGIN-2 Called at " + DateTime.Now;
e.TotalCount = res.TotalRecords;
store.DataSource = res.Data; // result.ToList();
store.DataBind();
}
protected void RowSelect_Event(object sender, AjaxEventArgs e)
{
}