3

ASP.NET に DataGrid を実装しようとしていますが、一度にすべてのデータを提供する必要がないように、カスタム ページングを実現したいと考えています。インターネットで数時間かけて調査しましたが、役立つものは何も見つかりませんでした。

ページを表示すると、グリッドに最初の結果セットが表示され、前のリンクが無効になっています。ただし、[次へ] をクリックすると、グリッドの最初のページが再び表示され、前のリンクが無効になります。コードをデバッグしているときに、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; }
    }

これについての考えは大歓迎です。

4

1 に答える 1

8

ASPXにエラーがあります。Pag​​eIndexChangedイベントハンドラーを接続するには、プロパティOnPageIndexChangedを使用します(コードのようにPageIndexChangedではありません)。

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

次に、AllowCustomPaging = "true"がある場合は、GetDataFromInternetSomehow()メソッドが現在選択されているページのデータのみを返すようにする必要があります。たとえば、現在のページをメソッドに渡し、対応するデータのみを返します。

GetDataFromInternetSomehow(e.NewPageIndex);

それ以外の場合は、カスタムページングを無効にすると、正常に機能します(ただし、すべてのデータが毎回読み込まれます)。

于 2009-01-24T13:24:09.493 に答える