Search code examples
c#asp.netdata-bindingrepeater

ASP.NET - Getting the object inside Repeater ItemTemplate with/without Eval


I am new to Repeater and DataBinding and I need help using it.

In PageLoad, I have

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

In the Repeater control, I have

<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>

But that is wrong.

What I need is to get the Photo object in ItemTemplate so I can do things with it (eg. to display the time as in the second line in ItemTemplate above). Is it even possible to do this in a Repeater?

Could someone point me to the right direction?

Thank you in advance!


Solution

  • Try something like this In the onDatabound event

    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"));
    }
    

    Edit -

    Sorry, I didn't see the extra Url there. I looks like you might have to create a small class or struct.

    See this Stackoverflow link for a hack workaround.

    Paul Suart's post in that thread made a valid point.