asp.net datagrid custompaging

ASP.NET DataGrid y paginación personalizada



custompaging (1)

Estoy tratando de implementar un DataGrid en ASP.NET, y quiero lograr una paginación personalizada para que no tenga que proporcionar todos los datos de una vez. He pasado varias horas investigando en Internet, pero no he encontrado nada útil.

Cuando veo la página, veo el primer conjunto de resultados en la grilla, con el enlace anterior desactivado. Sin embargo, cuando hago clic en siguiente, vuelvo a ver la primera página de la cuadrícula con el enlace anterior desactivado. Al depurar el código, averigué que el controlador de eventos MyGrid_PageIndexChanged () nunca se llama.

He incluido mi código simplificado a continuación. Cambié los nombres de las variables y los métodos omitidos para centrarme en el problema de la paginación de la cuadrícula de datos.

En el archivo 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>

Y en el archivo 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; } }

Cualquier idea sobre esto sería muy apreciada.


Hay un error en su ASPX: para conectar el controlador de eventos PageIndexChanged use la propiedad OnPageIndexChanged (no en el índice de página como en su código):

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

Luego, si tiene AllowCustomPaging = "true" , debe asegurarse de que el método GetDataFromInternetSomehow () solo devuelva los datos de la página seleccionada actualmente, por ejemplo, pase la página actual al método y devuelva solo los datos correspondientes:

GetDataFromInternetSomehow(e.NewPageIndex);

De lo contrario, desactive la paginación personalizada y simplemente funcionará (pero todos los datos se cargarán cada vez).