我的转发器的模板会生成一个表格,其中每个项目都是一个表格行 当满足非常特定的条件(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但为此我需要找到一张桌子吗?
我该如何解决?
答案 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 %>