c#
  • asp.net
  • 2009-07-02 53 views 1 likes 
    1

    對不起,如果帖子標題不清楚,我會盡量在這裏解釋一下。是否可以即時修改Databound內容?

    我正在使用數據綁定到數據表的Web控件。數據的輸出是這樣的:

    <asp:Repeater ID="RssRepeater" Visible="false" EnableViewState="false" runat="server"> 
        <asp:literal ID="sb_description" Text='<%# DataBinder.Eval (Container.DataItem, "description") %>' EnableViewState="false" runat="server" /> 
        ''// Rest of structure... 
    </asp:Repeater> 
    

    我寫的,從理論上講,應該修剪傳遞的字符串到指定數量的單詞的功能:

    protected string CreateTeaser(string Post) 
    { 
        int wordLimit = 50; 
        System.Text.StringBuilder oSB = new System.Text.StringBuilder(); 
    
        string[] splitBy = new string[] { " " }; 
    
        string[] splitPost = Post.Split(splitBy, 
             System.StringSplitOptions.RemoveEmptyEntries); 
    
        for (int i = 0; i <= wordLimit - 1; i++) 
        { 
         oSB.Append(string.Format("{0}{1}", splitPost[i], 
            (i < wordLimit - 1) ? " " : "")); 
        } 
    
        oSB.Append(" ..."); 
    
        return oSB.ToString(); 
    } 
    

    我想這可憎的

    <asp:literal ID="sb_description" Text='<%= CreateTeaser(%> <%# DataBinder.Eval (Container.DataItem, "description") %><%=); %>' EnableViewState="false" runat="server" /> 
    

    但當然它沒有工作。那麼,Databinder.Eval(...)這個函數是否可以在這個文字控件中使用?如果是這樣,我該如何去做這件事?如果不是,我想要做什麼替代?

    謝謝!

    回答

    2

    您可以直接提交Eval結果你的方法(使用原始Eval語法和強制轉換爲字符串):

    <asp:literal 
        ID="sb_description" 
        Text='<%= CreateTeaser((string)DataBinder.Eval (Container.DataItem, "description")) %>' 
        EnableViewState="false" 
        runat="server" 
    /> 
    
    +0

    謝謝,這讓我走上了正軌:) – Anders 2009-07-02 16:45:47

    1

    RowDataBound事件中這樣做會容易很多。

    +0

    感謝您的答覆!我正在使用ASP:Repeater控件來顯示我的數據。這個控件沒有那個屬性,有什麼我可以做的嗎? – Anders 2009-07-02 15:58:12

    0

    我不會用<%#的Bleh%>的東西在所有的這。您可以使用asp:Repeater的OnItemDataBound事件在代碼隱藏中將Repeater數據綁定。

    只需設置您的轉發器的數據源並在其上調用DataBind。

    List<stuff> feeds = //list of rss feeds, I am guessing. 
    RssRepeater.DataSource = feeds; 
    RssRepeater.DataBind(); 
    

    然後你就可以做到每個項目的更具體的一些事件

    protected void RssRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
        Literal label = (Literal)e.Item.FindControl("sb_description"); 
        label.Text = CreateTeaser(post); //post coming from your repeater somewhere. I can't see its definition 
        //post could probably be e.Item.DataItem, depending on how you do your DataSource 
    } 
    

    這種做法是一個更容易閱讀和維護比弄髒了你的aspx

    +0

    謝謝,夥計。我最終使用了這個派生物,用Sternal先生髮布的信息來弄清楚。 – Anders 2009-07-02 18:11:48

    相關問題