好的,所以当 Web 部件加载时,我从 CreateChildControls() 函数中的列表中提取:
String userGroup = GetProfileProperty(SPContext.Current.Web.CurrentUser.LoginName);//get user login's newsgroup // "All";
if (!string.IsNullOrEmpty(userGroup) && !userGroup.Equals("All"))
{
qry.RowLimit = 5;
camlquery = "<Where><Contains><FieldRef Name='Intended_x0020_Audience' /><Value Type='MultiChoice'>" + userGroup + "</Value></Contains></Where><OrderBy><FieldRef Name='Start_x0020_Date' Ascending='False' /></OrderBy>";
qry.Query = camlquery;
items = newsList.GetItems(qry);
//Print items inside a ajax panel....
}
else
{
qry.RowLimit = 5;
camlquery = "<OrderBy><FieldRef Name='Start_x0020_Date' Ascending='False' /></OrderBy>";
qry.Query = camlquery;
items = newsList.GetItems(qry);
////Print items inside a ajax panel....
}
我还没有使用分页,但我已将查询列表存储在 var items 中。当用户单击一个按钮时,更新面板会清除当前控件并执行另一个查询以获取新项目,但这次我使用分页。(见下文)
int lastID = items[items.Count - 1].ID;//last news item id of current page
//Get Web Context
SPWeb web = SPContext.Current.Web;
//Clear old panel
UpdatePanel up = (UpdatePanel)FindControl("Panel");
up.ContentTemplateContainer.Controls.Clear();//clear container of old news items
SPQuery qry = new SPQuery();//get query
qry.RowLimit = 5;
string camlquery = "<OrderBy><FieldRef Name='Start_x0020_Date' Ascending='False' /></OrderBy>";
qry.Query = camlquery;
SPListItemCollectionPosition position = new SPListItemCollectionPosition("Paged=TRUE&p_ID=" + lastID.ToString());
qry.ListItemCollectionPosition = position;
items = web.Lists["News Wire"].GetItems(qry);// newsList.GetItems(qry);
//print items inside ajax panel....
它确实改变了页面,但它返回了比需要更多的项目。当 web 部件第一次加载时,我会得到 5 个,但是当我单击触发事件以获取更多列表记录的按钮时,我会得到下一页的第一个项目以及第一页的前 3 个项目。注意:我的列表中只有六个项目。我将我的 RowLimit 限制为 5,但是当我加载第二页时,我从第一页得到 4 个项目和 3 个项目。