【问题标题】:How do I bind an ASP.net ajax AccordionPane to an XMLDatasource?如何将 ASP.net ajax AccordionPane 绑定到 XMLDatasource?
【发布时间】:2008-09-24 15:20:02
【问题描述】:

我有一个愤怒的老板,如果我在这件事上再浪费一天,他会打败我的:-P 许多业力指向可以解决我困境的 ajax 大师。

但更多细节:我想要一个 AccordionPane,它从 XML 源中抓取一堆链接并从所述源中填充自身。

【问题讨论】:

    标签: asp.net data-binding asp.net-ajax accordionpane


    【解决方案1】:

    可能有更性感的方式,但这很有效。随心所欲地填充数据源。这仅用于演示目的。 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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多