如何从DataTable for Pagination创建PagedList

时间:2016-05-09 17:43:33

标签: c# asp.net datatable pagination ado.net

我在ASP.NET MVC中,我目前正在使用ADO.NET来查询我的数据库,填充DataTable,然后将DataTable传递给我的视图以在屏幕上显示数据。 (我故意不遵循MVC最佳实践,我只是试图找出一个概念

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,这个概念看起来效果很好。我想传递一个PagedList,而不是将我的DataTable传递给我的视图,但我不知道如何将我的DataTable转换为PagedList。

有谁知道我如何获取我的DataTable,将其变成PagedList,然后将PagedList传递给我的分页视图?

1 个答案:

答案 0 :(得分:2)

首先,我将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

然后我将我的DataTable转换为List

list = dt.AsEnumerable().ToList();

然后我使用List

初始化了我的PagedList
plist = new PagedList<DataRow>(list, page ?? 1, 5);

然后我能够将此模型传递给我的View,并能够遍历我的PagedList

plist