从转发器的ItemDataBound事件中添加

时间:2010-04-06 16:14:17

标签: asp.net

我的转发器的模板会生成一个表格,其中每个项目都是一个表格行 当满足非常特定的条件(itemdata)时,我想从此事件向表中添加一行。

我该怎么做?

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

        bool tmp = bool.Parse(DataBinder.Eval(e.Item.DataItem, "somedata").ToString());
        if (!tmp && e.Item.ItemIndex != 0)
        {
            //Add row after this item
        }

   }
}

我可以使用e.Item.Controls.Add()并添加TableRow但为此我需要找到一张桌子吗?
我该如何解决?

2 个答案:

答案 0 :(得分:5)

我会在转发器项目模板中放入控件,将其可见性设置为隐藏&只有在这种情况下,我才会表明......

像:

<asp:Repeater ...>

..

<ItemTemplate>

 <tr>
   <td>...</td>
 </tr>
 <tr runat="server" id="tr_condition" Visible="false">
  <td> Show only in specific condition </td>
 </tr>

然后在ItemDataBound事件中:

var tr_condition = e.Item.FindControl("tr_condition") as HtmlTableRow;
tr_condition.Visible = myCondition;

其中myCondition是一个在特定条件下获取集合的标志

HTH

答案 1 :(得分:0)

执行此操作的一种方法是在模板代码中包含该行,并根据您的'tmp'变量设置Visible属性。你不需要“添加”它 - 它已经存在了。

编辑:另一个想法 - 使用&lt;%#%&gt;插入您的额外行数据绑定块。为此,您需要在ItemDataBound事件中生成<tr><td>..代码作为atring。使用受保护的字符串变量 - 如下所示:

protected string _extraRowHtml;
ItemDataBound中的

_extraRowHtml = tmp ? "<tr><td>  -- generated content -- </td></tr>" : string.Empty;
在ItemTemplate中

<tr><td> -- regular row content --</td></tr>
<%# _extraRowHtml %>