GridViewのページコントロールをカスタマイズする
GridViewでページコントロールを利用する場合、デフォルトでは番号によるページ指定と前後への移動によるページ指定を併用することはできません。
ですが、GridViewのRowCreatedイベントに以下のように記述することで前後、および先頭と最後へのページ移動コントロールを追加することができます。
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Pager)
{
LinkButton FirstLinkButton = new LinkButton();
FirstLinkButton.CommandName = "Page";
FirstLinkButton.CommandArgument = "First";
FirstLinkButton.Text = "<<";
TableCell FirstCell = new TableCell();
FirstCell.Controls.Add(FirstLinkButton);
e.Row.Cells[0].Controls[0].Controls[0].Controls.AddAt(0, FirstCell);
LinkButton PreviousLinkButton = new LinkButton();
PreviousLinkButton.CommandName = "Page";
PreviousLinkButton.CommandArgument = "Prev";
PreviousLinkButton.Text = "<";
TableCell PreviousCell = new TableCell();
PreviousCell.Controls.Add(PreviousLinkButton);
e.Row.Cells[0].Controls[0].Controls[0].Controls.AddAt(1, PreviousCell);
LinkButton NextLinkButton = new LinkButton();
NextLinkButton.CommandName = "Page";
NextLinkButton.CommandArgument = "Next";
NextLinkButton.Text = ">";
TableCell NextCell = new TableCell();
NextCell.Controls.Add(NextLinkButton);
e.Row.Cells[0].Controls[0].Controls[0].Controls.Add(NextCell);
LinkButton LastLinkButton = new LinkButton();
LastLinkButton.CommandName = "Page";
LastLinkButton.CommandArgument = "Last";
LastLinkButton.Text = ">>";
TableCell LastCell = new TableCell();
LastCell.Controls.Add(LastLinkButton);
e.Row.Cells[0].Controls[0].Controls[0].Controls.Add(LastCell);
}
}
このプログラムでは単にLinkButtonを追加しているだけですが、なぜこれでページが移動するのでしょうか。
その理由はLinkButtonのCommandNameとCommandArgumentにあります。
GridViewはあらかじめ決められているCommandNameとCommandArgumentが渡された場合、自動的にそのコマンドに応じた動作をするようになっているのです。
このため、LinkButtonやImageButtonを追加して、そこに適切なCommandName、CommandArgumentを設定すればそれに応じた動作はGridViewに任せることができます。