我有一個方法來返回一組對象作爲通用列表,然後綁定到Repeater。我想使用PagedDataSource類在中繼器上實現分頁,但我不確定這是否可行,因爲它似乎不起作用。將PagedDataSource綁定到通用列表是否可行?
我必須更改我的方法的返回類型,還是有可能將PagedDataSource綁定到通用列表?
我有一個方法來返回一組對象作爲通用列表,然後綁定到Repeater。我想使用PagedDataSource類在中繼器上實現分頁,但我不確定這是否可行,因爲它似乎不起作用。將PagedDataSource綁定到通用列表是否可行?
我必須更改我的方法的返回類型,還是有可能將PagedDataSource綁定到通用列表?
我只是修改了一些我的代碼使用一個通用的列表,並似乎已經工作得很好,希望這有助於:
注意,這整個方法可以帶或不帶頁碼被稱爲自動設置該頁面還在調用PagingPanel的面板內部建立一個分頁控件。
在PagedDataSource實例(dataSource)上設置DataSource的行確實帶有一個NewsItem(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));
}
感謝您的幫助,nice e xample。 – 2008-11-19 13:35:48