Ich versuche meinen Repeater über XElement zu binden.
In der cs-Datei
public void BindList()
{
XElement element = LoadXMLElement(GetList()); //Get List is another process its not a problem I got a list.
rptrList.DataSource = from x in element.Descendants("List")
select new { Value1 = x.Element("FileName"), Value2 = x.Element("URL"), Value3 = x.Element("Thumb") };
rptrList.DataBind();
}
public XElement LoadXMLElement(string xmlString)
{
XElement element = null;
try
{
element = XElement.Parse(xmlString);
}
catch (Exception ex)
{
throw new Exception("Unable to parse string to xmlformat");
}
return element;
}
Und in ascx:
<asp:Repeater ID="rptrList" runat="server"
onitemdatabound="rptrTemplateList_ItemDataBound">
<ItemTemplate>
<li>
<p>
<asp:Label ID="lblTemplateName" runat="server" Text="<%#Eval("FileName") %>" />
</p>
<asp:Image ID="imgThubNail" runat="server" ImageUrl="<%#Eval("Thumb") %>" />
<br />
</li>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblEmptyData" Text="No item To Display" runat="server" Visible="false">
</asp:Label>
</FooterTemplate>
</asp:Repeater>
Aber in ascx Eval
ist nicht die Arbeit. Ich versuche es XPath
aber kein glück. ich versuche zu suchen, aber nichts finden was mir hilft XElement
.
Antworten:
1 für die Antwort № 1Das Eval()
Anrufe suchen FileName
und Thumb
, aber die Linq to XML-Abfrage gibt Objekte mit zurück Value1
, Value2
, und Value3
. Versuchen Sie, die Abfrage zu ändern ...
rptrList.DataSource = from x in element.Descendants("List")
select new {
FileName = x.Element("FileName"),
URL = x.Element("URL"),
Thumb = x.Element("Thumb")
};
0 für die Antwort № 2
Es kann bevorzugt sein, dass Ihre Abfrage eine Liste von XElements zurückgibt, anstatt ein Objekt zu erstellen.
rptrList.DataSource = element.Descendants("List").Elements;
rptrList.DataBind();
Sobald Sie XElements an den Repeater gesendet haben, wird Ihre ItemTemplate
kann so aussehen:
<%#CType(Container.DataItem, System.Xml.Linq.XElement).Attribute("FileName").Value%>