我想将Repeater控件绑定到填充了XML数据的Dataset,但我不知道如何在repeater中显示属性。
Xml文件:
<root>
<items>
<item id="9" name="111111111111" description="111111245" views="1" galleryID="0" />
</items>
</root>
转发码:
<asp:Repeater ID="rptrGalleries" runat="server">
<ItemTemplate>
<a href='Page?id=<%#DataBinder.Eval(Container.DataItem, "id") %>'><%#DataBinder.Eval(Container.DataItem, "name") %></a>
</ItemTemplate>
</asp:Repeater>
代码隐藏:
XDocument doc = XDocument.Load(Server.MapPath("~/xml/gallery.xml"));
IEnumerable<XElement> items = from item in doc.Descendants("item")
orderby Convert.ToDateTime(item.Attribute("lastChanges").Value) descending
where int.Parse(item.Attribute("galleryID").Value) == 0 && bool.Parse(item.Attribute("visible").Value) != false
select item;
DataSet ds = new DataSet();
ds.ReadXml(new StringReader(doc.ToString()));
rptrGalleries.DataSource = ds;
rptrGalleries.DataBind();
当我编译网站时,我收到此错误:
System.Web.HttpException: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'id'.
答案 0 :(得分:1)
像这样创建转发器:
<asp:Repeater ID="rptTest" runat="server" OnItemDataBound="rptTest_ItemDataBound">
<ItemTemplate>
<asp:HyperLink ID="lnkTest" runat="server" />
</ItemTemplate>
</asp:Repeater>
将转发器绑定到IEnumerable<XElements>
项目对象。
XDocument doc = XDocument.Load(Server.MapPath("~/xml/gallery.xml"));
IEnumerable<XElement> items = from item in doc.Descendants("item")
orderby Convert.ToDateTime(item.Attribute("lastChanges").Value) descending
where int.Parse(item.Attribute("galleryID").Value) == 0 && bool.Parse(item.Attribute("visible").Value) != false
select item;
rptTest.DataSource = items;
rptTest.DataBind();
然后将数据OnItemDataBound绑定在后面的代码中,如下所示:
void rptTest_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
XElement item = (XElement)e.Item.DataItem;
HyperLink lnkTest = (HyperLink)e.Item.FindControl("lnkTest");
lnkTest.NavigateUrl = "Page?id=" + item.Attribute("id").Value;
lnkTest.Text = item.Attribute("name").Value;
}
这就是我要做的。我发现在OnItemDataBound中我有更多的控制权,而不是试图将数据直接传递给ASP.Net页面。