У меня есть способ вернуть группу объектов в виде общего списка, который затем привязываю к Repeater. Я хочу реализовать разбиение на страницы на ретрансляторе с использованием класса PagedDataSource, но я не уверен, что это возможно, поскольку это не работает.
Придется ли мне изменить тип возвращаемого значения моего метода или можно привязать PagedDataSource к общему списку?





Я только что изменил часть своего кода, чтобы использовать общий список, и, похоже, все работает нормально, надеюсь, это поможет:
Обратите внимание, что весь этот метод может быть вызван с номером страницы или без него для автоматической установки страницы, он также создает элемент управления разбиением по страницам внутри панели, вызывающей PagingPanel.
Строка, которая устанавливает DataSource в экземпляре PagedDataSource (dataSource), действительно принимает массив NewsItems (searchResults), я обновил его, чтобы использовать список, созданный с использованием массива NewItem.
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));
}