如何将ASP.net ajax AccordionPane绑定到XMLDatasource?
时间:2020-03-06 14:40:11 来源:igfitidea点击:
我有一个生气的老板,如果我再浪费一天的话会打败我的:-P许多业力指向可以解决我的困境的ajax专家。
但更多细节:我想拥有一个AccordionPane,它可以从XML源获取一堆链接,并从所述源中填充自身。
解决方案
可能有一种更性感的方式,但这是可行的。根据需要填充数据源。这只是出于演示目的。 PrettyTitle()的同上技巧关键是要记住手风琴中有两种物品类型。
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Accordion Binding</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="AjaxScriptManager" runat="server"> </asp:ScriptManager> <div> <cc1:Accordion ID="AccordionControl" runat="server" onitemdatabound="AccordionControl_ItemDataBound"> <Panes></Panes> <HeaderTemplate> <asp:Label ID="HeaderLabel" runat="server" /> </HeaderTemplate> <ContentTemplate> <asp:Literal ID="ContentLiteral" runat="server" /> <asp:HyperLink ID="ContentLink" runat="server" /> </ContentTemplate> </cc1:Accordion><asp:xmldatasource runat="server" ID="RockNUGTwitter" ></asp:xmldatasource> </div> </form> </body> </html>
后面的代码是:
Using System; using System.Web.UI.WebControls; using System.Xml; namespace Ajaxy { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Fill(); } private void Fill() { PopulateDataSource(); AccordionControl.DataSource = RockNUGTwitter.GetXmlDocument().SelectNodes("//item"); AccordionControl.DataBind(); } private void PopulateDataSource() { XmlDocument RockNugTwitterRSSDocument = new XmlDocument(); RockNugTwitterRSSDocument.Load("http://twitter.com/statuses/user_timeline/15912811.rss"); RockNUGTwitter.Data = RockNugTwitterRSSDocument.OuterXml; } protected void AccordionControl_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e) { XmlNode ItemNode = (XmlNode)e.AccordionItem.DataItem; if(e.AccordionItem.ItemType == AjaxControlToolkit.AccordionItemType.Content) { HyperLink ContentLink = (HyperLink)e.AccordionItem.FindControl("ContentLink"); ContentLink.NavigateUrl = ItemNode.SelectSingleNode("link").InnerText; Literal ContentLiteral = (Literal)e.AccordionItem.FindControl("ContentLiteral"); ContentLiteral.Text = ItemNode.SelectSingleNode("title").InnerText; ContentLink.Text = "Link"; } else if(e.AccordionItem.ItemType == AjaxControlToolkit.AccordionItemType.Header) { Label HeaderLabel = (Label) e.AccordionItem.FindControl("HeaderLabel"); HeaderLabel.Text = PrettyTitle(ItemNode.SelectSingleNode("title").InnerText); } } private string PrettyTitle(string FullItem) { string PrettyString = FullItem.Replace("RockNUG: ", ""); string[] Words = PrettyString.Split(' '); const int MAX_WORDS_TOSHOW = 4; int WordsToShow = MAX_WORDS_TOSHOW; if(Words.Length < MAX_WORDS_TOSHOW) { WordsToShow = Words.Length; } PrettyString = String.Join(" ", Words, 0, WordsToShow); if (Words.Length > WordsToShow) { PrettyString += "..."; } return PrettyString; } } }