2009-03-19 7 views
2

Je gère un site Web ASP.Net 2.0 qui affiche les produits dans un GridView. Le client m'a demandé si je pouvais afficher un bouton "Ajouter au panier" tous les dix rangs. Je pouvais le faire en mettant le bouton dans sa propre colonne et en inversant la visibilité mais je me demandais si je pouvais injecter une nouvelle ligne après chaque 10 articles. Cela place le bouton sur une ligne qui lui est propre et n'occupe pas l'espace des colonnes lorsqu'il n'est pas visible. Des idées sur la façon de faire cela? TIAPuis-je insérer une ligne dans un GridView?

+0

voulez-vous dire vraiment 1.1? Dans ce cas, vous faites probablement référence à DataGrid ou à quelque chose d'autre, veuillez le vérifier et mettre à jour la question. – eglasius

+0

Pourquoi le PO signifie-t-il vraiment 1.1? –

+0

Parce que je l'ai dit à l'origine 1.1 mais l'a changé en 2.0 après le commentaire de Freddy. – Sisiutl

Répondre

5

Il est notoirement difficile d'insérer des lignes dans un GridView. Avez-vous pensé à utiliser un répéteur?

le balisage suivant:

<asp:Repeater id="repeater" runat="server"> 
    <ItemTemplate> 
     <h1><%#Container.DataItem%></h1> 
    </ItemTemplate> 
</asp:Repeater> 

Vous pouvez utiliser le code-behind suivant pour insérer un contrôle personnalisé après selon les lignes que vous le souhaitez:

using System; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Collections.Generic; 

public partial class Default : Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     this.repeater.ItemCreated += repeater_ItemCreated; 

     base.OnInit(e); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     this.repeater.DataSource = new List<String> 
     { 
      "one", "two", "three", "four", "five", "six", "seven" 
     }; 

     this.repeater.DataBind(); 

     base.OnLoad(e); 
    } 

    void repeater_ItemCreated(Object sender, RepeaterItemEventArgs e) 
    { 
     if (this.repeater.Items.Count > 0 
      && this.repeater.Items.Count % 3 == 0) 
     { 
      this.repeater.Controls.Add(new LiteralControl("<h4>hello world</h4>")); 
     } 
    } 
} 
2

Je ne pense pas qu'il y ait de toute façon à le faire directement avec un GridView (sans casser dans la source). Mais ce que vous pourriez faire serait d'utiliser du javascript pour injecter le code HTML du bouton dans le DOM de la page après le rendu de GridView.

Vous parcourez toutes les lignes de la table créée par le quadrillage puis, après chaque 10ème ligne, créez une nouvelle ligne (avec toutes les cellules ou une seule cellule colspan). Dans cette cellule, insérez le bouton avec l'onClick appelant votre routine javascript pour ajouter l'article au panier.

Questions connexes