ASP.NET DataGrid และเพจแบบกำหนดเอง

ฉันกำลังพยายามใช้ DataGrid ใน ASP.NET และต้องการสร้างเพจแบบกำหนดเอง เพื่อจะได้ไม่ต้องให้ข้อมูลทั้งหมดในครั้งเดียว ฉันใช้เวลาหลายชั่วโมงในการค้นคว้าข้อมูลทางอินเทอร์เน็ต แต่ก็ไม่พบสิ่งใดที่เป็นประโยชน์

เมื่อฉันดูเพจ ฉันเห็นผลลัพธ์ชุดแรกในตาราง โดยที่ลิงก์ก่อนหน้าปิดใช้งานอยู่ เมื่อฉันคลิกถัดไป ฉันเห็นหน้าแรกของตารางอีกครั้งโดยที่ลิงก์ก่อนหน้าปิดใช้งานอยู่ เมื่อทำการดีบั๊กโค้ด ฉันแน่ใจว่าไม่เคยมีการเรียกตัวจัดการเหตุการณ์ MyGrid_PageIndexChanged()

ฉันได้รวมโค้ดแบบง่ายของฉันไว้ด้านล่าง ฉันได้เปลี่ยนชื่อตัวแปรและละเว้นวิธีการเพื่อเน้นไปที่ปัญหาการเพจของ DataGrid

ในไฟล์ 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