ASP.NET DataGrid и пользовательское разбиение по страницам

Я пытаюсь реализовать DataGrid в ASP.NET и хочу добиться пользовательского разбиения по страницам, чтобы мне не приходилось предоставлять все данные за один раз. Я провел несколько часов в Интернете, но не нашел ничего полезного.

Когда я просматриваю страницу, я вижу первый набор результатов в сетке с отключенной предыдущей ссылкой. Однако, когда я нажимаю «Далее», я снова вижу первую страницу сетки с отключенной предыдущей ссылкой. При отладке кода я убедился, что обработчик события MyGrid_PageIndexChanged() никогда не вызывается.

Я включил свой упрощенный код ниже. Я изменил имена переменных и опустил методы, чтобы сосредоточиться на проблеме разбиения на страницы в сетке данных.

В файле ASPX:

<asp:DataGrid ID="myGrid" runat="server" GridLines="None" UseAccessibleHeader="true" AutoGenerateColumns="false" AllowPaging="true" AllowCustomPaging="true" PageIndexChanged="MyGrid_PageIndexChanged">
<PagerStyle Mode="NextPrev" NextPageText="Next >" PrevPageText="< Previous" />

<Columns>
<asp:BoundColumn HeaderText="Title" DataField="Name" />
<asp:BoundColumn HeaderText="Date" DataField="Date" />
</Columns>
</asp:DataGrid>

И в файле CS:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
                            myGrid.PageSize = 20;
                            myGrid.VirtualItemCount = GetNumItems();
            BindMyGrid();
        }
    }

    protected void MyGrid_PageIndexChanged(object sender, DataGridPageChangedEventArgs e)
    {
        myGrid.CurrentPageIndex = e.NewPageIndex;
        BindMyGrid();
    }

    private int GetNumItems()
    {
        return 500;
    }

    private void BindMyGrid()
    {
            Data[] array = GetDataFromInternetSomehow();
            this.myGrid.DataSource = array;
            this.myGrid.DataBind();
    }

    private class Data
    {
        public string Date { get; set; }
        public string Name { get; set; }
    }

Любые мысли по этому поводу будут высоко оценены.


person Saqib    schedule 24.01.2009    source источник


Ответы (1)


В вашем ASPX есть ошибка: для подключения обработчика событий PageIndexChanged используйте свойство OnPageIndexChanged (а не PageIndexChanged, как в вашем коде):

<asp:DataGrid ID="myGrid" runat="server"
   OnPageIndexChanged="MyGrid_PageIndexChanged"  /// <--- here's the error
   ...

Затем, если у вас есть AllowCustomPaging="true", вы должны убедиться, что метод GetDataFromInternetSomehow() будет возвращать данные только для текущей выбранной страницы, например. передать текущую страницу в метод и вернуть только соответствующие данные:

GetDataFromInternetSomehow(e.NewPageIndex);

В противном случае отключите пользовательское разбиение по страницам, и оно будет работать (но все данные будут загружаться каждый раз).

person M4N    schedule 24.01.2009
comment
Потрясающе - спасибо. Добавление On заставило его работать - такая разница может иметь две буквы. Я думаю, читая образцы в Интернете, я просто увидел атрибут и подумал, да, я понял. Странно, что не было ошибки компиляции или времени выполнения. - person Saqib; 24.01.2009
comment
@SaqibЯ знаю, что это старо, но отметьте этот ответ как принятый ответ. - person eglasius; 02.04.2009