2008-11-19 2 views
3

J'ai une méthode pour retourner un groupe d'objets comme une liste générique que je lie ensuite à un répéteur. Je veux implémenter la pagination sur le répéteur en utilisant la classe PagedDataSource mais je ne suis pas sûr que cela soit possible car cela ne semble pas fonctionner.Est-il possbile de lier une PagedDataSource à une liste générique?

Devrai-je modifier le type de retour de ma méthode ou est-il possible de lier PagedDataSource à la liste générique?

Répondre

4

Je viens modifié une partie de mon code pour utiliser une liste générique et semble avoir bien fonctionné, espérons que cette aide:

Notez que cette méthode ensemble peut être appelé avec ou sans numéro de page automatiquement la page, il construit également un contrôle de pagination à l'intérieur d'un panneau appelant PagingPanel. La ligne qui définit DataSource sur l'instance de PagedDataSource (dataSource) a pris un tableau d'éléments de type NewsItems (searchResults), que j'ai mis à jour pour utiliser une liste créée à l'aide du tableau NewItem.

void PopulateNewsItems (int? pageNo) 
{ 
    var model = ModelFactory.GetNewsModel(); 
    var searchResults = model.GetNewsItems(); 

    var dataSource = new PagedDataSource(); 

    // CHANGED THE ARRAY OF NEWSITEMS INTO A GENERIC LIST OF NEWSITEMS. 
    dataSource.DataSource = new List<NewsItem> (searchResults); 
    dataSource.AllowPaging = true; 

    var pageSizeFromConfig = ConfigurationManager.AppSettings["NewsItemsPageCount"]; 
    var pageSize = 10; 

    int.TryParse (pageSizeFromConfig, out pageSize); 

    dataSource.PageSize = pageSize; 
    dataSource.CurrentPageIndex = pageNo ?? 0; 

    PagingPanel.Controls.Clear(); 
    for (var i = 0; i < dataSource.PageCount; i++) 
    { 
     var linkButton = new LinkButton(); 
     linkButton.CommandArgument = i.ToString(); 
     linkButton.CommandName = "PageNo"; 
     linkButton.Command += NavigationCommand; 
     linkButton.ID = string.Format ("PageNo{0}LinkButton", i); 
     if (pageNo == i || (pageNo == null && i == 0)) 
     { 
      linkButton.Enabled = false; 
      linkButton.CssClass = "SelectedPageLink"; 
     } 

     linkButton.Text = (i + 1).ToString(); 

     PagingPanel.Controls.Add (linkButton); 
     if (i < (dataSource.PageCount - 1)) 
      PagingPanel.Controls.Add (new LiteralControl ("|")); 
    } 

    NewsRepeater.DataSource = dataSource; 
    NewsRepeater.DataBind(); 
} 

void NavigationCommand (object sender, CommandEventArgs e) 
{ 
    PopulateNewsItems (int.Parse ((string)e.CommandArgument)); 
} 
+0

Merci pour l'aide, belle e xample. –

+0

Pas de problème, content que cela ait aidé. – Kieron

3
  1. Définissez votre source de données de PagedDataSource à votre liste
  2. Configuration des variables d'appel de votre PagedDataSource à tout ce dont vous avez besoin
  3. Définir l'objet PagedDataSource lui-même la source de données de votre répéteur
  4. Liez le répéteur
  5. Travail fait