我是Repeater和DataBinding的新手,我需要帮助才能使用它。
在页面加载中,我有
var photos = from p in MyDataContext.Photos
select new {
p,
Url = p.GetImageUrl()
};
repeater1.DataSource = photos;
repeater1.DataBind();
在Repeater控件中,我有
<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>
但这是错误的。
我需要的是在ItemTemplate中获取Photo对象,以便我可以使用它(例如,在上面的ItemTemplate中显示第二行中的时间)。甚至可以在中继器中执行此操作吗?
有人能指出我正确的方向吗?
先感谢您!
尝试这样的事情在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"));
}
编辑 -
对不起,我没有在那里看到额外的Url。我看起来你可能要创建一个小类或结构。
有关黑客解决方法,请参阅此Stackoverflow link。
Paul Suart在该帖子中的帖子提出了一个有效的观点。
你有没有尝试过:
<%# Eval("p") %>
代替
<% Photo p = (Photo) Eval("p"); %>
我用另一种方法。在我的“注册”中,我导入了对象类:
<%@ Import Namespace="Test.Test.TO" %>
有了这个可能会使用你的对象......
接下来,我在我的代码隐藏,全局变量中创建了一个与我想要绑定的类型相同的对象...
public Test test;
在我的Repeater里面的ItemTemplate:
<span style="display: none;"> <%# test = (Test)Container.DataItem %> </span>
现在,您可以使用所有对象的属性,包括ToString来格式化文化...
对不起我的英语不好。