2016-05-09 11 views
0

私はASP.NET MVCを使用していますが、現在ADO.NETを使用してデータベースを照会し、DataTableを入力してからDataTableをビューに渡してデータを画面に表示します。 (私は意図的にイムだけの概念を把握しようと、MVCのベストプラクティスに従うわけではない)PaginationのPagedListを作成する方法

public ActionResult Index() 
{ 
    DataTable dt = new DataTable(); 
    using (AdomdConnection con = new AdomdConnection(consString)) 
     { 
      con.Open(); 
      AdomdCommand query = new AdomdCommand("Some query blah blah", con); 
      AdomdDataAdapter da = new AdomdDataAdapter(query); 

      da.Fill(dt);  
     } 
     return View(dt); 
} 

とビューで

@model System.Data.DataTable 
@{ 
ViewBag.Title = "Home Page"; 
} 

<table id="infoTable"> 
<thead> 
    <tr> 
     <th>Key</th> 
     <th>Weight</th> 
     <th>Discount Amount</th> 
     <th>Sales Count</th> 
    </tr> 
</thead> 
@foreach(System.Data.DataRow row in Model.Rows) 
{ 
    <tr> 
     @foreach(var cell in row.ItemArray) 
     { 
      <td>@cell</td> 
     } 
    </tr> 
} 
</table> 

これは、現在、私の画面上のすべてのデータ行を表示します。私は一度に画面上に表示されるレコードは少なく、テーブルの一番下にあるコントロールを使用してさらに多くのレコードを表示するように、ページネーションを追加します。

PagedListが見つかりました。コンセプトはうまくいくようです。 DataTableをビューに渡すのではなく、PagedListを渡したいのですが、DataTableをPagedListに変換する方法がわかりません。

どのように私は自分のDataTableを取ることができ、PagedListにすることができます知っている、Pagination私のビューにPagedListを渡す?

答えて

1

まず、私はそれがあるべきよう、独自のモデルに私のDataTableを分離し、このモデルでは、

は、私はその後、リスト

list = dt.AsEnumerable().ToList(); 
に私のDataTableをキャスト

public List<DataRow> list { get; set;}//Regular list to hold data from Datatable 
public PagedList<DataRow> plist { get; set; }//Paged list for pagination to be filled with data from regular List 

作成しました

私のリストを使用してPagedListを初期化しました

plist = new PagedList<DataRow>(list, page ?? 1, 5); 

このモデルを私のビューに渡すことができました。私のPagedListを反復する能力を持っています。

plist 
関連する問題