2008-10-22 8 views
0

J'aimerais vraiment avoir un AlternatingItemTemplate sur un GridView, mais tout ce qu'il offre est un AlternatingItemStyle. Dans ma grille, chaque rangée de deux colonnes (dans une disposition de table), a une image dans la première colonne, et une description dans la deuxième colonne. Je voudrais que le positionnement de l'image et de la description alternent sur des rangées alternatives.Alternance élément Style

Comment est-ce que je peux faire ceci?

Répondre

2

Vous pourriez envisager de gérer cela avec AlternatingItemStyle pour le plaisir.

Utiliser 1 colonne ou un répéteur:

Item Modèle:

<div class="MyImage"><img src="" /></div> 
<div class="MyDescription">Blah...Blah...</div> 

CSS:

.MyItemStyle .MyImage {width:49%; float:left;} 
.MyItemStyle .MyDescription {width:49%; float:right;} 

.MyAltItemStyle .MyImage {width:49%; float:right;} 
.MyAltItemStyle .MyDescription {width:49%; float:left;} 

Appliquer à Gridview/répéteur:

ItemStyle = "MyItemStyle" 
AlternatingItemStyle = "MyAltItemStyle" 

Cela laisserait tu te changes l'esprit r sans avoir à recoder gestionnaires d'événements, etc.

+0

J'aime. Je vais essayer plus tard. – ProfK

+0

Merci en effet. – ProfK

+1

Je sais que c'est un ancien poste mais je suis tombé sur elle et je voulais juste prendre note pour les futurs visiteurs. le contrôle répéteur ne dispose pas d'une propriété AlternatingItemStyle (ou ItemStyle pour cette matière). Il a, cependant, avoir AlternatingItemTemplate ... Gridview est OK. – skajfes

0

Vous devrez soit gérer les données événement de liaison pour essayer de déterminer si elle est un élément ou un élément alternatif, ou de passer à l'aide d'un contrôle qui prend en charge les modèles d'article et AlternatingItem.

3

est ici une façon:

ASP.NET:

<asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound" /> 

événement ItemDataBound:

public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // e.Item is an alternating item 
    } 
    else 
    { 
    } 
} 
1

Je pense que cela fonctionnerait:

<asp:GridView> 
    <Columns> 
     <asp:TemplateColumn> 
      <%# Container.DataItemIndex % 2 == 0 ? Eval("Image") : Eval("Desc") %> 
     </asp:TemplateColumn> 
     <asp:TemplateColumn> 
      <%# Container.DataItemIndex % 2 == 0 ? Eval("Desc") : Eval("Image") %> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:GridView> 

De toute évidence, l'image Eval aurait vraiment besoin d'être une balise img, ou vous pouvez remplacer certains usercontrols, etc. le bit important est le Container.DataItemIndex% 2. Vous pouvez même l'utiliser comme un DataBind sur visible.

<asp:GridView> 
    <Columns> 
     <asp:TemplateColumn> 
      <uc:Image Data='<%# Eval("Image") %>' 
       Visible='<%# Container.DataItemIndex % 2 == 0 %>' /> 
      <uc:Description Data='<%# Eval("Description") %>' 
       Visible='<%# Container.DataItemIndex % 2 != 0 %>' /> 
     </asp:TemplateColumn> 
     <asp:TemplateColumn> 
      <uc:Image Data='<%# Eval("Image") %>' 
       Visible='<%# Container.DataItemIndex % 2 != 0 %>' /> 
      <uc:Description Data='<%# Eval("Description") %>' 
       Visible='<%# Container.DataItemIndex % 2 == 0 %>' /> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:GridView> 
Questions connexes