4

我正在尝试更改中继器中的值:(通过 itemdatabound 事件)

如果年份为空 - 设置值blabla

我的中继器:

 <ItemTemplate>
                <tr  >
                    <td  >
                        <%#Eval("year") %>
                   </td>

我的 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"; // ???????

            }
        }

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

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

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

但是 - 我的问题:

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

4

3 回答 3

7

你可以尝试这样的事情:

.aspx 中的中继器:

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

    </table>
    </ItemTemplate>
</asp:Repeater>

.cs

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

 }

INGetText方法您可以通过字符串检查是否为空而不是返回字符串。

于 2012-05-06T10:59:48.470 回答
1

您可以尝试使用在控件绑定之前而不是在控件绑定之后发生的 itemcreated 事件。第一个链接中的示例:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcreated.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater_events.aspx

ItemDataBound 在Repeater 控件中的项目被数据绑定之后但在页面上呈现之前发生。

于 2012-05-06T09:49:29.113 回答
1

文件

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

    </table>
    </ItemTemplate>
</asp:Repeater>

.CS 代码

protected void RPT_Bordereaux_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
   {
   }
}


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

         }

这应该工作

于 2012-05-06T11:08:35.893 回答