使用 c# 在 sharepoint Web 部件中使用 .net ajax 和分页时出现意外结果

问题描述 投票:0回答:1

好吧,当 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 个项目。

c# ajax sharepoint pagination web-parts
1个回答
1
投票

如果您向前翻页,您可以将第一个查询的 results

 (
ListItemCollectionPosition) 中的 SPListItemCollection
 传递到下一个查询 - 您不必费力手动构建它。

在获得第一组结果后,您需要将其存储在某个地方 - 我之前使用过 ViewState,您也可以在更新面板中使用隐藏控件。

当您向后翻页时,您确实需要像您正在做的那样创建字符串。您还需要包含一个键/值来指示您要向后退,并且您需要包含您的排序指示。 (您也许可以从自动生成的前向分页值中获取此值。)(我认为缺少排序也是您的前向分页不起作用的原因。)

This是我在尝试自己实现此功能时使用的资源,尽管现在有点模糊。

© www.soinside.com 2019 - 2024. All rights reserved.