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; }
}
これについての考えは大歓迎です。