ASP.NET DataGrid dan paging khusus

Saya mencoba menerapkan DataGrid di ASP.NET, dan ingin mencapai paging khusus sehingga saya tidak perlu menyediakan semua data sekaligus. Saya telah menghabiskan beberapa jam untuk meneliti di internet, tetapi belum menemukan sesuatu yang berguna.

Saat saya melihat halaman tersebut, saya melihat kumpulan hasil pertama di kisi, dengan tautan sebelumnya dinonaktifkan. Namun ketika saya mengklik berikutnya, saya sekali lagi melihat halaman pertama grid dengan tautan sebelumnya dinonaktifkan. Saat men-debug kode, saya memastikan bahwa event handler MyGrid_PageIndexChanged() tidak pernah dipanggil.

Saya telah memasukkan kode sederhana saya di bawah ini. Saya telah mengubah nama variabel dan menghilangkan metode untuk fokus pada masalah paging datagrid.

Dalam file 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>

Dan di file 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; }
    }

Setiap pemikiran tentang hal ini akan sangat dihargai.


person Saqib    schedule 24.01.2009    source sumber


Jawaban (1)


Ada kesalahan di ASPX Anda: untuk menyambungkan event handler PageIndexChanged gunakan properti OnPageIndexChanged (bukan PageIndexChanged seperti pada kode Anda):

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

Lalu, jika Anda memiliki AllowCustomPaging="true", Anda harus memastikan bahwa metode GetDataFromInternetSomehow() hanya akan mengembalikan data untuk laman yang dipilih saat ini, misalnya. meneruskan halaman saat ini ke metode dan hanya mengembalikan data yang sesuai:

GetDataFromInternetSomehow(e.NewPageIndex);

Jika tidak, nonaktifkan paging khusus dan itu akan berfungsi (tetapi semua data akan dimuat setiap saat).

person M4N    schedule 24.01.2009
comment
Keren terima kasih. Menambahkan On membuatnya berhasil - perbedaan yang bisa dihasilkan oleh dua huruf. Saya rasa saat membaca sampel di internet saya hanya melihat atributnya dan berpikir ya, saya mengerti. Anehnya tidak ada kesalahan waktu kompilasi atau proses. - person Saqib; 24.01.2009
comment
@SaqibSaya tahu ini sudah lama, tetapi tandai jawaban ini sebagai jawaban yang diterima. - person eglasius; 02.04.2009