X.PagedListを使ってページングするプログラム
今回は、こちらの記事で作成したプログラムをベースに、プロジェクトを新規に作成し、一覧画面にページング処理を追加します。
ページング処理は、NuGetパッケージの X.PagedList を使って実装します。
X.PagedListパッケージに関する内容は、以下のマイクロソフトの公式サイトを参照してください。
新規プロジェクトの作成
新規にプロジェクトを作成します。
今回のサンプルプログラムでは、プロジェクト名を「Test5」として作成します。
プロジェクトの作成方法は、こちらの記事を参照してください。
X.PagedListのインストール
ページング処理を行うNuGetパッケージ「X.PagedList」をインストールします。
メニューバーから「ツール」→「NuGetパッケージマネージャー」→「ソリューションのNuGetパッケージの管理」を選択します。

NuGetソリューション画面から「参照」タブを選択し、検索ボックスに「x.pagedlist」と入力します。
表示された一覧から「X.PagedList.Mvc」を選択します。
インストールするプロジェクトにチェックを入れ、バージョンは最新の安定版を選択して、「インストール」ボタンを押下します。

しばらくすると確認画面が表示されるので、「OK」ボタンを押下します。

「インストール済み」タブを選択して、インストール結果を確認します。
「X.PagedList.Mvc」をインストールすると、自動的に「X.PagedList」と「X.PagedList.Web.Common」もインストールされます。

bootstrapのインストール
X.PagedListで使用するページ送りボタンを装飾するために、「bootstrap」をインストールします。
bootstrapの最新バージョンは5.22(2022/10/25現在)ですが、このプロジェクトでは、Visual Studioの標準バージョンである3.41を使用します。
NuGetソリューション画面から「参照」タブを選択し、検索ボックスに「bootstrap」と入力します。
表示された一覧から「bootstrap」を選択します。
インストールするプロジェクトにチェックを入れ、バージョンは「3.41」を選択して、「インストール」ボタンを押下します。

しばらくすると確認画面が表示されるので、「OK」ボタンを押下します。

「インストール済み」タブを選択して、インストール結果を確認します。

データベースの作成
プログラムを作成する前に、データベースを作成しておきます。
データベースは、Visual Studio付属の「SQL Server Express LocalDB」を使用します。
データベースの作成方法は、こちらの記事を参照してください。
データベースの仕様は、以下の通りです。
IDをプライマリーキーとして、1から始まる自動採番とします。
データベースの仕様
- データベース名:TestDb
- テーブル名:Emp
| 名前 | データ型 | Nullを許容 | その他 | 
|---|---|---|---|
| Id | int | NOT NULL | IDENTITY (1, 1) | 
| Name | nvarchar(20) | NOT NULL | |
| Address | nvarchar(50) | NOT NULL | |
| Birthday | date | NOT NULL | |
| nvarchar(30) | NULL | 
EMPテーブルのデータも、あらかじめインサートしておきます。
メニューバーの「ツール」→「SQL Server」→「新しいクエリ」で、クエリ画面から以下のSQL文を使ってデータをインサートします。
データ
insert into Emp values(N'山田太郎',N'東京都千代田区丸の内1-1-1','2000/1/1','yamada@aaa.co.jp');
insert into Emp values(N'鈴木一朗',N'愛知県名古屋市中区3-1-1','1985/5/10','suzuki@bbb.co.jp');
insert into Emp values(N'佐藤花子',N'福岡県福岡市中央区区1-8-1','1998/11/30', 'hanako@bbb.co.jp');
insert into Emp values(N'斉藤洋',N'北海道札幌市中央区1-2-3','1970/3/21', 'hiroshi@aaa.co.jp');
insert into Emp values(N'田中権三郎',N'鹿児島県鹿児島市10-1','1971/4/29', 'gonzaburo@ccc.co.jp');
insert into Emp values(N'高橋龍之介',N'千葉県千葉市中央区1-1','1981/12/24', 'ryunosuke@aaa.co.jp');
insert into Emp values(N'渡辺太',N'石川県金沢市1-1-1','1963/2/28', 'futoshi@aaa.co.jp');
insert into Emp values(N'山本恵子',N'東京都新宿区歌舞伎町1-4-1','1999/9/9', 'keiko@bbb.co.jp');
insert into Emp values(N'中村左門',N'大阪府大阪市北区1-3-20','1993/8/16', 'samon@aaa.co.jp');
insert into Emp values(N'小林梅子',N'高知県高知市5-1-45','1995/11/23', 'umeko@bbb.co.jp');
ADO.NET Entity Data Modelの作成
EMPテーブルを作成したら、VB.NETとデータベースを接続するために、ADO.NET Entity Data Modelを作成します。
モデル名は、「TestDbModel」とします。
ADO.NET Entity Data Modelの作成方法は、こちらの記事を参照してください。
Empクラスにアノテーションを追加
自動で作成されたEmpクラスの各プロパティに、アノテーションを追加します。
また、Birthdayプロパティに、表示フォーマットを追加します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.ComponentModel.DataAnnotations Partial Public Class Emp     <DisplayName("ID")>     Public Property Id As Integer     <DisplayName("氏名")>     Public Property Name As String     <DisplayName("住所")>     Public Property Address As String     <DisplayName("生年月日")>     <DisplayFormat(DataFormatString:="{0:yyyy年MM月dd日}")>     Public Property Birthday As Date     <DisplayName("メール")>     Public Property Email As String End Class | 
データベース操作用クラスの作成
データベースを操作するためのクラスを、「DbModel.vb」という名前で、「Data」フォルダーの配下に作成します。
「Data」フォルダーは、あらかじめ作成しておきます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | Imports System.Web.Mvc Public Class DbModel     Function GetEmp() As List(Of Emp)         Dim emp As List(Of Emp)         Using db As New TestDbEntities             emp = db.Emp.ToList()         End Using         Return emp     End Function End Class | 
コントローラーの作成
一覧画面用のコントローラーを作成します。
pageNumberは表示するページ番号、pageSizeは1ページに表示する件数です。
今回は1ページに4件づつ表示していきます。
10行目は、ページ番号を設定しますが、初回はページ番号が渡されないので、「1」を設定します。
13行目で、ビューに表示するデータを渡していますが、ToPagedList()メソッドを使って、表示するページ番号と件数を指定します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Imports System.Web.Mvc Imports X.PagedList Namespace Controllers     Public Class HomeController         Inherits Controller         Function Index(page? As Integer) As ActionResult             Dim model As New DbModel             Dim pageNumber As Integer = If(page, 1)             Dim pageSize As Integer = 4             Return View(model.GetEmp().ToPagedList(pageNumber, pageSize))         End Function     End Class End Namespace | 
ビューの作成
一覧画面用のビューを作成します。
先頭行に「@Imports X.PagedList.Mvc」と記述して、X.PagedList.Mvcをインポートすることによって、26行目のページング機能(@Html.PagedListPager)が使えるようになります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @Imports X.PagedList.Mvc @ModelType IEnumerable(Of Emp) @Code     ViewData("Title") = "Index" End Code <table>     <tr>         <th>@Html.DisplayNameFor(Function(model) model.Id)</th>         <th>@Html.DisplayNameFor(Function(model) model.Name)</th>         <th>@Html.DisplayNameFor(Function(model) model.Address)</th>         <th>@Html.DisplayNameFor(Function(model) model.Birthday)</th>         <th>@Html.DisplayNameFor(Function(model) model.Email)</th>     </tr>     @For Each item In Model         @<tr>             <td>@Html.DisplayFor(Function(model) item.Id)</td>             <td>@Html.DisplayFor(Function(model) item.Name)</td>             <td>@Html.DisplayFor(Function(model) item.Address)</td>             <td>@Html.DisplayFor(Function(model) item.Birthday)</td>             <td>@Html.DisplayFor(Function(model) item.Email)</td>         </tr>     Next </table> <div>        @Html.PagedListPager(Model, Function(number) Url.Action("Index", New With {.page = number})) </div> | 
表示レイアウトの編集
ビューを作成すると、自動的に「Views/Shared/_Layout.vbhtml」が作成されるので、これを以下のように編集します。
| 1 2 3 4 5 6 7 8 9 10 11 12 | <!DOCTYPE html> <html lang="ja"> <head>     <meta charset="utf-8" />     <title>@ViewBag.Title - My ASP.NET Application</title>     <link href="~/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />     <link href="~/Content/Site.css" rel="stylesheet" type="text/css" /> </head> <body>     @RenderBody() </body> </html> | 
スタイルシートの修正
テーブルの装飾をするために、スタイルシート(Site.css)を修正します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | body {     margin: 20px;     padding: 20px; } table {     border-collapse: collapse;     width: 60%; } th {     background-color: yellow;     border: 1px solid;     text-align: center; } td {     border: 1px solid; } | 
プログラムの実行
プログラムを実行すると、以下のように左下にページ送りボタンが表示され、ページング処理ができるようになります。
HomeController.vbで、1画面に4件づつ表示するように設定しています。


