2009-11-19 11 views
5

¿Alguien tiene alguna pista sobre cómo mostrar 4 elementos en posición horizontal con un repetidor? Un repetidor muestra elementos que se apagan por defecto. Aquí está mi código de prueba repetidor hasta el momento:¿Cómo se muestran x artículos por fila en un repetidor?

<table border=0 cellpadding=0 cellspacing=0 align="center" width="800px;> 
    <tr> 
     <asp:Repeater ID="rptTest" runat="server"> 
      <ItemTemplate> 
        <td> 
         <h3><a href="<%#GetItemLink((Item)Container.DataItem) %>"><%#((WebMenuItem)Container.DataItem).Name %></a></h3> 
         <div> 
          <a href="<%#GetUrl((Item)Container.DataItem) %>"> 
           <img src="<%#GetImage((Item)Container.DataItem) %>" alt="<%#GetAltText((Item)Container.DataItem) %>" /> 
          </a> 
         </div> 
        </td> 
      </ItemTemplate> 
     </asp:Repeater> 
    </tr> 
</table> 
+0

Estos son los datos tabulares, o datos que simplemente desea mostrar en una columna 4, muchos rejilla fila? Como miniaturas de imágenes, por ejemplo. –

+0

Todo, quiero usar un repetidor, nada más. – PositiveGuy

+0

esto es datos tabulares pero imágenes y texto, no solo texto para mostrar productos en una grilla, 4 por fila. – PositiveGuy

Respuesta

0

intenta establecer una clase CSS para sus <td> etiquetas, y configure la anchura explícita.

+0

que no tiene nada que ver. Un repetidor repetirá por defecto incluso si el ancho es ajustado en cada elemento. – PositiveGuy

+1

eso no es cierto, el objetivo de una plantilla Repeater es generar su propio HTML personalizado, y es el navegador el que interpreta cómo representarlo. Se trata de cómo se construye el HTML que se envía al navegador y qué reglas se definen que le dicen al navegador cómo renderizar correctamente. – jaywon

2

El uso del control DataList con la propiedad RepeatColumns podría ser más simple:

DataList1.RepeatColumns = 4; 
DataList1.RepeatDirection = RepeatDirection.Horizontal; 
3

Scott Guthrie proporciona un ejemplo de cómo hacer esto con un control ListView en el siguiente article. Él usa el control para generar una lista desordenada y usa CSS para controlar el diseño.

+0

Buena elección: existe la posibilidad de agrupar elementos ... +1 – IrishChieftain

+0

Lo que estaba pensando también. –

2

Usar un ListView http://msdn.microsoft.com/en-us/library/bb398790.aspx

<asp:ListView runat="server" ID="ListView1" 
    DataSourceID="SqlDataSource1" 
    GroupItemCount="5"> 
    <LayoutTemplate> 
    <table runat="server" id="table1"> 
     <tr runat="server" id="groupPlaceholder"> 
     </tr> 
    </table> 
    </LayoutTemplate> 
    <GroupTemplate> 
    <tr runat="server" id="tableRow"> 
     <td runat="server" id="itemPlaceholder" /> 
    </tr> 
    </GroupTemplate> 
    <ItemTemplate> 
    <td runat="server"> 
     <%-- Data-bound content. --%> 
     <asp:Label ID="NameLabel" runat="server" 
      Text='<%#Eval("Name") %>' /> 
    </td> 
    </ItemTemplate> 
</asp:ListView> 
20
<table> 
    <asp:Repeater id="rptTest" runat="server"> 
     <ItemTemplate> 
      <%# (Container.ItemIndex + 4) % 4 == 0 ? "<tr>" : string.Empty %> 
       <td> 
        ... cell contents omitted ... 
       </td> 
      <%# (Container.ItemIndex + 4) % 4 == 3 ? "</tr>" : string.Empty %> 
     </ItemTemplate> 
    </asp:Repeater> 
</table> 

Viva el repetidor humilde!

+0

¡Perfecto, me salvaste el día! – magnattic

+0

@Jeff Sternal Probé su solución, pero me da error, ¿por qué? – Alaa

+0

@Alaa: si proporciona más información aquí o la publica como pregunta, tendré una mejor oportunidad de ayudarlo. –

0

Esto podría hacer el trabajo (estoy asumiendo que puede tener más de una fila de cuatro imágenes):

<asp:Repeater ID="rptTest" runat="server"> 

<HeaderTemplate> 
<table border=0 cellpadding=0 cellspacing=0 align="center" width="800px"> 
<tr> 
</HeaderTemplate> 

<ItemTemplate> 
<%# (Container.ItemIndex != 0 && Container.ItemIndex % 4 == 0) ? @"</tr><tr>" : string.Empty %> 
<td> 
<h3><a href="<%#GetItemLink((Item)Container.DataItem) %>"><%# (WebMenuItem)Container.DataItem).Name %></a></h3> 
<div> 
<a href="<%#GetUrl((Item)Container.DataItem) %>"><img src="<%#GetImage((Item)Container.DataItem) %>" alt="<%#GetAltText((Item)Container.DataItem) %>" /></a> 
</div> 
</td> 
</ItemTemplate> 

<FooterTemplate> 
</tr> 
</table> 
</FooterTemplate> 

</asp:Repeater> 

(IDE ninguna manera no probado :)

Si no ayuda , algunas respuestas de this question podrían.

4

Modificando la sugerencia de Nick que pude utilizar para hacer una cuadrícula de imagen vertical 5 horizontal x n. Gracias Nick!

<asp:Repeater ID="colorsList" runat="server"> 
    <HeaderTemplate> 
     <table> 
     <tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <%# (Container.ItemIndex != 0 && Container.ItemIndex % 5 == 0) ? @"</tr><tr>" : string.Empty %> 
     <td> 
     <div><img src="<%#ColorThumbnailImage((string)DataBinder.Eval(Container.DataItem, "COLOR_SQUARE_IMAGE")) %>" /></div> 
     <div><%# DataBinder.Eval(Container.DataItem, "COLOR_NAME") %></div> 
     </td> 
    </ItemTemplate> 
    <FooterTemplate> 
     </tr></table> 
    </FooterTemplate> 
    </asp:Repeater> 

Y aquí es ColorThumbnailImage

protected string ColorThumbnailImage(string fileName) 
{ 
    return Request.ApplicationPath + MySports.System.Configuration.ColorSquareImageLocation + fileName; 
} 
Cuestiones relacionadas