3

さて、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 つの項目が取得されます。注: 私のリストには 6 つの項目しかありません。RowLimit を 5 に制限しましたが、2 番目のページを読み込むと、最初のページから 4 つの項目と 3 つの項目が取得されます。

4

1 に答える 1

1

順方向にページングしている場合はListItemCollectionPosition、最初のクエリの結果( SPListItemCollection) を次のクエリに渡すことができます。手作業で作成する必要はありません。

結果の最初のセットを取得した後、どこかに保存する必要があります。以前に ViewState を使用したことがありますが、更新パネルで非表示のコントロールを使用することもできます。

逆方向にページングするときは、行っているように文字列を作成する必要があります。また、逆方向に進んでいることを示すキー/値を含める必要があり、 sort の指示を含める必要があります。(自動生成された forward-paging 値からこれを取得できる場合があります。) (並べ替えがないことが、forwards ページングも機能しない理由だと思います。)

これは、私が自分でこれを機能させようとしていたときに使用したリソースですが、今は少しぼんやりしています。

于 2012-10-19T20:06:11.403 に答える