2010-11-13 35 views
0

Je suis nouveau à Repeater et DataBinding et j'ai besoin d'aide pour l'utiliser.ASP.NET - Obtenir l'objet à l'intérieur Repeater ItemTemplate avec/sans Eval

En PageLoad, je

var photos = from p in MyDataContext.Photos 
      select new { 
       p, 
       Url = p.GetImageUrl() 
      }; 
repeater1.DataSource = photos; 
repeater1.DataBind(); 

Dans le contrôle Repeater, je

<ItemTemplate> 
    <% Photo p = (Photo) Eval("p"); %> <!-- Apparently I can't do this --> 
    ... 
    <asp:TextBox runat="server" ID="txtTime" Text='<%= p.Time == null ? "" : ((DateTime)p.Time).ToString("dd/MM/yyyy HH:mm:ss") %>' /> 
    ... 
</ItemTemplate> 

Mais ce qui est faux. Ce dont j'ai besoin, c'est d'obtenir l'objet Photo dans ItemTemplate pour pouvoir faire des choses avec lui (par exemple pour afficher l'heure comme dans la deuxième ligne dans ItemTemplate ci-dessus). Est-il même possible de le faire dans un répéteur?

Est-ce que quelqu'un pourrait me diriger dans la bonne direction?

Merci d'avance!

Répondre

1

Essayez quelque chose comme ceci En cas onDatabound

if (e.Item.ItemType = ListItemType.Item) 
{ 
    photo p = (photo)e.DataItem; 
    Textbox txtTime = (Textbox)e.Item.FindControl("txtTime"); 

    txtTime.text = (p.Time == null ? "" : ((DateTime)p.Time).ToString("dd/MM/yyyy HH:mm:ss")); 
} 

Edition -

Désolé, je n ne vois pas l'ex tra Url là-bas. Je dirais que vous pourriez avoir à créer une petite classe ou struct.

Voir ce Stackoverflow link pour une solution de contournement.

Le message de Paul Suart dans ce fil a fait un point valide.

+0

Merci Lareau, mais e.Item.DataItem n'est pas Photo, je ne sais pas quel type il est ... quelque chose comme IQueryable (voir mon code ci-dessus, var photos = ...) – Aximili

+0

Parfait! Merci beaucoup Lareau! – Aximili

0

Avez-vous essayé juste:

<%# Eval("p") %> 

au lieu de

<% Photo p = (Photo) Eval("p"); %> 
+0

C'est la déclaration originale qui a fonctionné. Mais cela n'attribue pas la valeur à Photo p. – Aximili