ASP.NET GridView Paging с IQueryable - PullRequest
       5

ASP.NET GridView Paging с IQueryable

1 голос
/ 09 сентября 2010

В настоящее время я использую IPagedList для эффективного просмотра своих данных.

При использовании с GridView я могу установить индекс страницы в событии GridView.PageIndexChanging и перепривязать сетку.

Проблема в том, что свойство GridView.PageCount доступно только для чтения, поэтому пейджер по умолчанию отображает только 1 страницу.

Полагаю, мне придется свернуть собственную реализацию GridView, чтобы обойти это? У кого-нибудь есть тот, который они уже сделали?

Ответы [ 2 ]

6 голосов
/ 09 сентября 2010

Помогло в этом сообщении Я создал свой собственный элемент управления 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();
    }

Надеюсь, это поможет.

1 голос
/ 08 марта 2011

Это то, что я использовал для выполнения разбивки на страницы и сортировки с помощью gridview при привязке к IQueryable: http://bradoyler.com/post/399042473/using-the-asp-net-gridview-with-objectdatasource-and

Надеюсь, это тоже поможет!

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