Scenario:
We were working on to display item from a discussion list from a paged result set.
Solution:
While I am still not 100% convinced why someone need to fetch all records from 1 to last record of the page you want to display.
Here's the code which worked. Once can use this to work with cache object to make performance faster.
Code:
public override void RenderControl (System.Web.UI.HtmlTextWriter writer) { writer.WriteLine("============================"); if (null != HttpContext.Current.Request.QueryString["pageno"]) { int pageno = 1; int.TryParse(HttpContext.Current.Request.QueryString["pageno"].ToString(), out pageno); SPWeb oWebsite = SPContext.Current.Web; SPList oList = oWebsite.Lists["Team Discussion"]; SPQuery oQuery = new SPQuery(); oQuery.RowLimit = 2; oQuery.Query = "<OrderBy Override='TRUE'>" + "<FieldRef Name='Modified' Ascending='FALSE' /></OrderBy>"; int intIndex = 1; do { writer.WriteLine("Page: " + intIndex ); SPListItemCollection collListItems = oList.GetItems(oQuery); if (intIndex == pageno) { foreach (SPListItem oListItem in collListItems) { writer.WriteLine(SPEncode.HtmlEncode(oListItem["Title"].ToString()) ); } break; } oQuery.ListItemCollectionPosition = collListItems.ListItemCollectionPosition; if (null != collListItems.ListItemCollectionPosition) intIndex++; } while (oQuery.ListItemCollectionPosition != null); writer.Write("================================="); } base.RenderControl(writer); }Article: SPListItemCollectionPosition
0 comments:
Post a Comment