none
Comment faire un GridView avec ASP.NET MVC RRS feed

  • Discussion générale

  •  

    Cet exemple est simple et facile à utiliser. Consultez le code suivant pour la définition de PaginatedList :

     

     public class PaginatedList<T> : List<T> 
     { 
      public int PageIndex { get; private set; } 
      public int PageSize { get; private set; } 
      public int TotalCount { get; private set; } 
      public int TotalPages { get; private set; } 
      public PaginatedList(ICollection<T> source, int pageIndex, int pageSize) 
      { 
       PageIndex = pageIndex; 
       PageSize = pageSize; 
       TotalCount = source.Count(); 
       TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); 
       this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize)); 
      } 
      public bool HasPreviousPage 
      { 
       get 
       { 
        return (PageIndex > 0); 
       } 
      } 
      public bool HasNextPage 
      { 
       get 
       { 
        return (PageIndex + 1 < TotalPages); 
       } 
      } 
     }
    

     

     

     

    Le code ci-dessous est utilisé pour récupérer les valeurs de la base de données et les convertir dans PaginatedList :

     

    public ActionResult Index(int? page) 
      { 
       const int pageSize = 25; 
       var allNews = newRepository.FindAllNews().ToList(); 
       var paginatedNews = new PaginatedList<New>(allNews, page ?? 0, pageSize); 
       return View(paginatedNews); 
      }
    
    

     

    Dans le ‘view code’ généré par Visual Studio 2008 on doit changer cette partie :

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable <AspMvcDemo.Models.New>>" %>
    
    

     

    avec ça :

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/site.Master" Inherits="System.Web.Mvc.ViewPage<PaginatedList<AspMvcDemo.Models.New>>" %>
    
    

     

     

    Si on ne veut pas la changer, il faut implémenter l’interface IEnumerable pour PaginatedList en remplaçant le code:

    public PaginatedList(ICollection<T> source, int pageIndex, int pageSize) 
    
    

     

    avec :

    public PaginatedList(IEnumerable<T> source, int pageIndex, int pageSize)
    
    

     

    On doit aussi assigner une route pour récupérer les données paginées ;

    dans ce code, on assigne ‘News’ :

     

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/site.Master" Inherits="System.Web.Mvc.ViewPage<PaginatedList<AspMvcDemo.Models.New>>" %> 
    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Index</asp:Content> 
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <h2> Index</h2> 
    <table> <tr><th></th><th> ID</th><th>IsDeleted</th><th>Sort</th><th>Title</th><th>Summary 
    </th> <th>Description</th><th>CreateDate</th></tr> 
    <% foreach (var item in Model) 
    { %><tr> 
    <td><%= Html.ActionLink("Edit", "Edit", new { id=item.ID }) %>| <%= Html.ActionLink("Details", "Details", new { id=item.ID })%></td> 
    <td><%= Html.Encode(item.ID) %></td> 
    <td> <%= Html.Encode(item.IsDeleted) %></td> 
    <td><%= Html.Encode(item.Sort) %></td> 
    <td><%= Html.Encode(item.Title) %></td> 
    <td> <%= Html.Encode(item.Summary) %></td> 
    <td><%= Html.Encode(item.Description) %></td> 
    <td><%= Html.Encode(String.Format("{0:g}", item.CreateDate)) %></td> 
    </tr> <% 
    } %> 
    </table> 
    <p><%= Html.ActionLink("Create New", "Create") %></p> 
    <% if (Model.HasPreviousPage) 
    { %> <%= Html.RouteLink("Previous Page", 
    "News", 
    new { page=(Model.PageIndex-1) }) %> <% } %> 
    <% if (Model.HasNextPage) 
    { %> <%= Html.RouteLink("Next Page", 
    "News", 
    new { page = (Model.PageIndex + 1) })%> <% } %> 
    </asp:Content>
    
    

     

     

    Et la dernière partie, la route ‘News’ :

          routes.MapRoute(  
            "News",  
            "News/Page/{page}",  
            new { controller = "News", action = "Index" }  
          );

     

     

     

     

     

     

    Pour plusieurs informations, visitez la page Foire aux Questions – ASP.NET

     

     

     

             

    jeudi 29 avril 2010 13:13
    Modérateur