更改转发器行值?

Roy*_*mir 4 c# asp.net webforms repeater itemdatabound

即时尝试更改转发器中的值:(通过itemdatabound事件)

如果年份为空 - 设定值 blabla

我的中继器:

 <ItemTemplate>
                <tr  >
                    <td  >
                        <%#Eval("year") %>
                   </td>
Run Code Online (Sandbox Code Playgroud)

我的c#代码:

 void RPT_Bordereaux_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            if (string.IsNullOrEmpty(((DataRowView)e.Item.DataItem)["year"].ToString()))
            { 
                (((DataRowView)e.Item.DataItem)["year"]) = "blabla"; // ???????

            }
        }
Run Code Online (Sandbox Code Playgroud)

它确实发生了变化但未在转发器中显示(显示旧值).

一种解决方案是在服务器中的- 和" "中添加一个server controlliteral(runat服务器)并更改其值.itemTemplatefindControl

其他解决方案是通过jQuery - 搜索空的最后一个TD.

但是 - 我的问题:

有没有其他服务器端解决方案()?

Jig*_*put 6

你可以尝试这样的事情:

.aspx中的转发器:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
    <table>
    <tr>
          <td> <%# GetText(Container.DataItem) %></td>
    </tr>

    </table>
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

.cs:

 protected static string GetText(object dataItem)
 {
    string year = Convert.ToString(DataBinder.Eval(dataItem, "year"));
    if (!string.IsNullOrEmpty(year))
    {
        return year;
    }
    else
    {
        return "blahblah";
    }

 }
Run Code Online (Sandbox Code Playgroud)

在IN GetText方法中,您可以通过字符串检查是否为空或返回字符串.