Помог this post Я создал свой собственный элемент управления GridView, который позволил мне переопределить инициализацию пейджера и установить количество записей.
public class CustomGridView : GridView
{
private const string _virtualItemCount = "virtualItemCount";
private const string _currentPageIndex = "currentPageIndex";
[Browsable(true), Category("Custom")]
[Description("Set the virtual item count for this grid")]
public int VirtualItemCount {
get
{
if (ViewState[_virtualItemCount] == null)
ViewState[_virtualItemCount] = -1;
return Convert.ToInt32(ViewState[_virtualItemCount]);
}
set
{
ViewState[_virtualItemCount] = value;
}
}
private int CurrentPageIndex
{
get
{
if (ViewState[_currentPageIndex] == null)
ViewState[_currentPageIndex] = 0;
return Convert.ToInt32(ViewState[_currentPageIndex]);
}
set
{
ViewState[_currentPageIndex] = value;
}
}
public override object DataSource
{
get
{
return base.DataSource;
}
set
{
base.DataSource = value;
this.CurrentPageIndex = this.PageIndex;
}
}
protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
if (CustomPaging)
{
pagedDataSource.VirtualCount = this.VirtualItemCount;
pagedDataSource.CurrentPageIndex = this.CurrentPageIndex;
}
base.InitializePager(row, columnSpan, pagedDataSource);
}
public bool CustomPaging {
get { return (this.VirtualItemCount != -1); }
}
}
Тогда на событии CustomGridView.PageIndexChanging мы устанавливаем индекс страницы и загрузите наши данные (проходящий индекс страницы и размер страницы в наше хранилище метода):
protected void gvAccounts_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvAccounts.PageIndex = e.NewPageIndex;
BindGrid(e.NewPageIndex, gvAccounts.PageSize);
}
protected void BindGrid(int pageIndex, int pageSize)
{
var accounts = AccountManager.GetAllAccounts<int>(pageIndex, pageSize, x=> x.AccountId);
gvAccounts.VirtualItemCount = accounts.TotalCount;
gvAccounts.DataSource = accounts;
gvAccounts.DataBind();
}
Надеется, что это помогает.
Привет, я знаю, что это опубликовано некоторое время назад. Я устал от этого, и в большинстве случаев он работает. Однако, когда я нахожусь на второй странице (с размером страницы 20), когда страница загружается, будет вызываться InitializePage, и я не был назначен PagedDataSource.DataSource - это dummydatasource. и это то, что вызывает у меня проблему. позже, после события page_load, я попытался сделать GridView.rows.count, он показывает мне, что у меня есть элементы в списке, а у меня только 18 на второй странице. и я проверяю внутри этого списка, эти 18 страниц верны, но есть 2 дополнительных элемента, которые пусты. Любая подсказка? – Dhana