Sharepoint 2010 пользовательская страница подкачки - PullRequest
0 голосов
/ 06 января 2011

Я пытаюсь реализовать простое разбиение на страницы на моей странице sharepoint.У меня есть один список новостных статей, в котором есть несколько простых столбцов.Я хочу, чтобы на странице было пять, а внизу - числовое разбиение на страницы.Я прошел через сеть, пытаясь понять splistitemcollectionposition, но безуспешно.Если кто-то может помочь, пожалуйста, не могли бы вы дать мне простой пример кода или руководство

Большое спасибо

Крис

Ответы [ 3 ]

0 голосов
/ 09 января 2011

Используйте это руководство для некоторых классов / методов / свойств, которые могут вам понадобиться для работы с пейджингом. Помните, что этот код не компилируется, я только что собрал различные фрагменты кода, которые есть в моей собственной структуре результатов списка, которая включает в себя разбиение на страницы, сортировку, группирование и кэширование. Этого должно быть достаточно, чтобы вы начали.

public class PagedListResults : System.Web.UI.WebControls.WebParts.WebPart {

    protected SPPagedGridView oGrid;

    protected override void CreateChildControls() {
        this.oGrid = new SPPagedGridView();
        oGrid.AllowPaging = true;
        oGrid.PageIndexChanging += new GridViewPageEventHandler(oGrid_PageIndexChanging);
        oGrid.PagerTemplate = null;  // Must be called after Controls.Add(oGrid)
        oGrid.PagerSettings.Mode = PagerButtons.NumericFirstLast;
        oGrid.PagerSettings.PageButtonCount = 3;
        oGrid.PagerSettings.Position = PagerPosition.TopAndBottom;
        base.CreateChildControls();
    }

    public override void DataBind() {
        base.DataBind();

        SPQuery q = new SPQuery();
        q.RowLimit = (uint)info.PageSize;
        if (!string.IsNullOrEmpty(info.PagingInfoData)) {
            SPListItemCollectionPosition pos = new SPListItemCollectionPosition(info.PagingInfoData);
            q.ListItemCollectionPosition = pos;
        } else {
            //1st page, dont need a position, and using a position breaks things
        }
        q.Query = info.Caml;
        SPListItemCollection items = SPContext.Current.List.GetItems(q);

        FilterInfo info = null;
        string tmp = "<View></View>";
        tmp = tmp.Replace("<View><Query>", string.Empty);
        tmp = tmp.Replace("</Query></View>", string.Empty);
        info.Caml = tmp;
        info.PagingInfoData = string.Empty;
        info.CurrentPage = oGrid.CurrentPageIndex;
        info.PageSize = oGrid.PageSize;
        if (oGrid.PageIndex == 0 || oGrid.CurrentPageIndex == 0) {
            //do nothing
        } else {
            StringBuilder value = new StringBuilder();
            value.Append("Paged=TRUE");
            value.AppendFormat("&p_ID={0}", ViewState[KEY_PagingPrefix + "ID:" + oGrid.PageIndex]);
            info.PagingInfoData = value.ToString();
        }

        int pagecount = (int)Math.Ceiling(items.Count / (double)oGrid.PageSize);
        for (int i = 1; i < pagecount; i++) { //not always ascending index numbers
            ResultItem item = items[(i * oGrid.PageSize) - 1];
            ViewState[KEY_PagingPrefix + "ID:" + i] = item.ID;
        }

        oGrid.VirtualCount = items.Count;

        DateTime time3 = DateTime.Now;
        DataTable table = new DataTable("Data");
        DataBindListData(table, items);

        this.oGrid.DataSource = table;
        this.oGrid.DataBind();
        this.oGrid.PageIndex = oGrid.CurrentPageIndex; //need to reset this after DataBind
    }

    void oGrid_PageIndexChanging(object sender, GridViewPageEventArgs e) {
        oGrid.PageIndex = e.NewPageIndex;
        oGrid.CurrentPageIndex = oGrid.PageIndex;
    }
}

public class FilterInfo {
    public string Caml;
    public string PagingInfoData;
    public int CurrentPage;
    public int PageSize;
}

public class SPPagedGridView : SPGridView {

    protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource) {
        pagedDataSource.AllowCustomPaging = true;
        pagedDataSource.VirtualCount = virtualcount;
        pagedDataSource.CurrentPageIndex = currentpageindex;
        base.InitializePager(row, columnSpan, pagedDataSource);
    }

    private int virtualcount = 0;
    public int VirtualCount {
        get { return virtualcount; }
        set { virtualcount = value; }
    }

    private int currentpageindex = 0;
    public int CurrentPageIndex {
        get { return currentpageindex; }
        set { currentpageindex = value; }
    }
}
0 голосов
/ 08 ноября 2011

Посмотрите мой пост о том, как создавать страницы с помощью SPListItemCollectionPosition, я сделал компонент для просмотра списков, возможно, это может помочь -> http://hveiras.wordpress.com/2011/11/07/listpagert-using-splistitemcollectionposition/

0 голосов
/ 07 января 2011

Я бы предложил использовать SPDataSource и SPGridView, вместе они будут реализовывать пейджинг и многие другие интересные функции с минимальным кодом или без кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...