如何在webGrid helper中设置总页数

本文关键字:设置 helper webGrid | 更新日期: 2023-09-27 18:17:23

我使用WebGrid helper mvc来显示数据。我想通过跳过和计数来获取数据为此,我使用这个Action:

public static IList<Employee> CreateEmployees(int page,int count)
    {
        var skipe = page * count;
        var list = new List<Employee>();
        var rnd = new Random();
        for (int i = 1; i <= 1000; i++)
        {
            list.Add(new Employee
            {
                Id = i + 1000,
                FirstName = "fName " + i,
                LastName = "lName " + i,
                AddDate = DateTime.Now.AddYears(-rnd.Next(1, 10)),
                Salary = rnd.Next(400, 3000),
                Projects = CreateRandomProjects()
            });
        }
        return list.Skip(skipe).Take(count).ToList();
    }

但是当我在网格视图中显示数据时,它只有一个页面,因为我每次读取10条记录,我想获得总页面并将其设置为ViewBag,并在viewset中设置为WebGrid中的总数。我的代码显示网格是:

    @helper WebGridPageFirstItem(WebGrid grid)
{
    @(((grid.PageIndex + 1) * grid.RowsPerPage) - (grid.RowsPerPage - 1));
}
@helper WebGridPageLastItem(WebGrid grid)
{
    if (grid.TotalRowCount < (grid.PageIndex + 1 * grid.RowsPerPage))
    {
        @grid.TotalRowCount;
    }
    else
    {
        @((grid.PageIndex + 1) * grid.RowsPerPage);
    }
}
<h2>Employees List</h2>
@{
    var grid = new WebGrid(
        source: Model,
        canPage: true,
        rowsPerPage: 10,
        canSort: true,
        defaultSort: "FirstName"
    );
    var salaryPageSum = 0;
    var taxPageSum = 0;
    var rowIndex = ((grid.PageIndex + 1) * grid.RowsPerPage) - (grid.RowsPerPage - 1);
}
<div id="container">
    @grid.GetHtml(
            tableStyle: "webgrid",
            headerStyle: "webgrid-header",
            footerStyle: "webgrid-footer",
            alternatingRowStyle: "webgrid-alternating-row",
            selectedRowStyle: "webgrid-selected-row",
            rowStyle: "webgrid-row-style",
            htmlAttributes: new { id = "MyGrid" },
            mode: WebGridPagerModes.All,
            columns: grid.Columns(
                 grid.Column(header: "#",
                             style: "text-align-center-col",
                             format: @<text>@(rowIndex++)</text>),
                 grid.Column(columnName: "FirstName", header: "First Name",
                             format: @<span style='font-weight: bold'>@item.FirstName</span>,
                             style: "text-align-center-col"),
                 grid.Column(columnName: "LastName", header: "Last Name"),
                 grid.Column(header: "Image",
                             style: "text-align-center-col",
                             format: @<text><img alt="@item.Id" src="@Url.Content("~/images/" + @item.Id + ".jpg")" /></text>),
                 grid.Column(header: "",
                             style: "text-align-center-col",
                             format: item => @Html.ActionLink(linkText: "Edit", actionName: "Edit",
                                                              controllerName: "Home", routeValues: new { id = item.Id },
                                                              htmlAttributes: null)),
                 grid.Column(header: "",
                             format: @<form action="/Home/Delete/@item.Id" method="post">
                    <input type="submit"
                           onclick="return confirm('Do you want to delete this record?');"
                           value="Delete" />
                </form>),
                     grid.Column(header: "", format: item => item.GetSelectLink("Select"))
                          )
                      )
    <strong>Page:</strong> @(grid.PageIndex + 1) / @grid.PageCount,
    <strong>Records:</strong> @WebGridPageFirstItem(@grid) - @WebGridPageLastItem(@grid) of @grid.TotalRowCount
</div>

如何在webGrid helper中设置总页数

每次调用方法时都是在重新创建列表。

你应该这样做:

.
.
var TotalEmployees = 1000;
var list = new List<Employee>();
FillList();
public void FillList(int totalEmployees)
{
   var rnd = new Random();
   for (int i = 1; i <= totalEmployees; i++)
   {
     list.Add(new Employee
     {
       Id = i + 1000,
       FirstName = "fName " + i,
       LastName = "lName " + i,
       AddDate = DateTime.Now.AddYears(-rnd.Next(1, 10)),
       Salary = rnd.Next(400, 3000),
       Projects = CreateRandomProjects()
     });
    }
  }
}

public static IList<Employee> EmployeesForPage(int page,int count)
    {
        var skipe = page * count;
        ViewBag.TotalPages = TotalEmployees/count;
        return list.Skip(skipe).Take(count).ToList();
    }