是否可以动态修改数据绑定内容?

时间:2009-07-02 15:47:11

标签: c# asp.net

很抱歉,如果帖子标题不清楚,我会在这里尝试解释一下。

我正在使用一个数据绑定到数据表的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( ... )上使用此函数?如果是这样,我该怎么做呢?如果没有,那么我可以做什么的替代方案呢?

非常感谢!

3 个答案:

答案 0 :(得分:2)

您可以将Eval结果直接提交给您的方法(使用原始Eval语法并转换为字符串):

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

答案 1 :(得分:1)

RowDataBound事件中这样做会容易得多。

答案 2 :(得分:0)

我不会使用&lt;%#bleh%&gt;完全是为了这个。您可以使用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更容易阅读和维护