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)Article: SPListItemCollectionPosition
{
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);
}
0 comments:
Post a Comment