ASP.NET DataGrid и пользовательская подкачка - PullRequest
3 голосов
/ 24 января 2009

Я пытаюсь реализовать 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; }
    }

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

1 Ответ

8 голосов
/ 24 января 2009

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

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

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

GetDataFromInternetSomehow(e.NewPageIndex);

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

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