更改转发器行值?

时间:2012-05-06 08:40:16

标签: c# asp.net webforms repeater itemdatabound

我试图更改我的转发器中的值:(通过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 control中添加literalitemTemplate(runat服务器) - 并在服务器中添加“findControl”并更改其值。 / p>

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

但是 - 我的问题:

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

3 个答案:

答案 0 :(得分:6)

你可以尝试这样的事情:

.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";
    }

 }

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

答案 1 :(得分:1)

HTML文件

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

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

.CS CODE

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";
            }

         }

这应该有效

答案 2 :(得分:0)

您可以尝试使用在绑定控件之前发生的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控件中的项目受数据限制但在页面上呈现之前发生。