代码之家  ›  专栏  ›  技术社区  ›  Robert Dougan

是否可以将PagedDataSource绑定到通用列表?

  •  4
  • Robert Dougan  · 技术社区  · 17 年前

    我有一个方法可以将一组对象作为泛型列表返回,然后将其绑定到Repeater。我想使用PagedDataSource类在中继器上实现分页,但我不确定这是否可能,因为它似乎不起作用。

    我是否必须更改方法的返回类型,或者是否可以将PagedDataSource绑定到泛型列表?

    2 回复  |  直到 17 年前
        1
  •  4
  •   Kieron    17 年前

    我刚刚修改了一些代码,使用了通用列表,似乎工作得很好,希望这能有所帮助:

    请注意,可以在有或没有页码的情况下调用整个方法来自动设置页面,它还可以在调用PagingPanel的面板内构建一个分页控件。

    在PagedDataSource实例(DataSource)上设置DataSource的行确实采用了NewsItems数组(searchResults),我已将其更新为使用NewItem数组创建的List。

    void PopulateNewsItems (int? pageNo)
    {
        var model = ModelFactory.GetNewsModel ();
        var searchResults = model.GetNewsItems ();
    
        var dataSource = new PagedDataSource ();
    
        // CHANGED THE ARRAY OF NEWSITEMS INTO A GENERIC LIST OF NEWSITEMS.
        dataSource.DataSource = new List<NewsItem> (searchResults);
        dataSource.AllowPaging = true;
    
        var pageSizeFromConfig = ConfigurationManager.AppSettings["NewsItemsPageCount"];
        var pageSize = 10;
    
        int.TryParse (pageSizeFromConfig, out pageSize);
    
        dataSource.PageSize = pageSize;
        dataSource.CurrentPageIndex = pageNo ?? 0;
    
        PagingPanel.Controls.Clear ();
        for (var i = 0; i < dataSource.PageCount; i++)
        {
            var linkButton = new LinkButton ();
            linkButton.CommandArgument = i.ToString ();
            linkButton.CommandName = "PageNo";
            linkButton.Command += NavigationCommand;
            linkButton.ID = string.Format ("PageNo{0}LinkButton", i);
            if (pageNo == i || (pageNo == null && i == 0))
            {
                linkButton.Enabled = false;
                linkButton.CssClass = "SelectedPageLink";
            }
    
            linkButton.Text = (i + 1).ToString ();
    
            PagingPanel.Controls.Add (linkButton);
            if (i < (dataSource.PageCount - 1))
                PagingPanel.Controls.Add (new LiteralControl ("|"));
        }
    
        NewsRepeater.DataSource = dataSource;
        NewsRepeater.DataBind ();
    }
    
    void NavigationCommand (object sender, CommandEventArgs e)
    {
        PopulateNewsItems (int.Parse ((string)e.CommandArgument));
    }
    
        2
  •  3
  •   John_    17 年前
    1. 将PagedDataSource的数据源设置为列表
    2. 根据需要设置PagedDataSource的分页变量
    3. 将中继器的数据源设置为pageddatasource对象本身
    4. 绑定中继器
    5. 完成任务