我正在尝试注入(inject)中继器项目内部,问题是该行是在错误的位置生成的。
如果您尝试这个简单的示例,您将看到 rown 是在标签“2”下生成的,因为它应该在标签“1”下生成。
为什么会发生这种情况?以及如何解决这个问题?
protected void Page_Load(object sender, EventArgs e)
{
int [] array = {1,2,3,4,5};
rpt.DataSource = array;
rpt.DataBind();
}
protected string _extraRowHtml;
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
int tmp = ((int)e.Item.DataItem);
_extraRowHtml = tmp == 1 ? "<tr><td class=\"topicsRow\" colspan=\"100%\"> Topics </td></tr>" : string.Empty; ;
}
}
<asp:Repeater ID="rpt" runat="server" onitemdatabound="rpt_ItemDataBound">
<HeaderTemplate>
<table cellpadding="0px" cellspacing="0">
</HeaderTemplate>
<ItemTemplate>
<tr style="height:50px">
<td>
<asp:HyperLink ID="lnkTitle" runat="server" Text='<%# Container.DataItem%>'/>
</td>
</tr>
<%# _extraRowHtml %>
</ItemTemplate>
<FooterTempl
</table>
</FooterTemplate>
</asp:Repeater>
最佳答案
我个人认为更好的做法是替换:
<%# _extraRowHtml %>
与
<%# GetExtraRow(Container.DataItem) %>
然后在你的代码中实现:
protected string GetExtraRow(object Data)
{
int tmp = (int) Data:
return _tmp == 1 ?
"<tr><td class=\"topicsRow\" colspan=\"100%\"> Topics </td></tr>" :
string.Empty;
}
然后删除 rpt_ItemDataBound
函数(以及 onItemDataBound
)。
关于asp.net - 将表行注入(inject)重复器项内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600633/