1
我有一个中继器:访问嵌套转发的数据源
<asp:Repeater ID="rptSessions" runat="server">
这里面我有另一个中继器:
<asp:Repeater ID="rptPeople" runat="server" OnItemDataBound="rptPeople_ItemDataBound">
在的ItemDataBound我的父母中继器,我设置为数据源儿童中继器。
Dim dtPeople As New DataTable
dtPeople.Columns.Add("FirstName")
dtPeople.Columns.Add("LastName")
dtPeople.Columns.Add("Company")
If e.Item.DataItem("Lunch") = True Then dtPeople.Columns.Add("Dietary") <-- ***
rptPeople.DataSource = dtPeople
rptPeople.DataBind()
现在考虑的HTML为我的孩子中继
<asp:Repeater ID="rptPeople" runat="server" OnItemDataBound="rptPeople_ItemDataBound">
<HeaderTemplate>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Company</th>
<asp:Literal ID="litDietaryRequirements" runat="server"><th>Dietary Requirements</th></asp:Literal>
</tr>
</HeaderTemplate>
.....
在的ItemDataBound为我的孩子我直放站想隐藏取决于列Dietary
是否存在于它的数据源litDietaryRequirements。我试过如下:
If e.Item.ItemType = ListItemType.Header Then
DirectCast(e.Item.FindControl("litDietaryRequirements"), Literal).Visible = DirectCast(e.Item.DataItem, DataRowView).Row.Table.Columns.Contains("Lunch")
End If
e.Item.DataItem强制转换似乎没有什么
DataItem的始终是'ListItemType.Header'没有。也许这有助于:http://stackoverflow.com/questions/1411336/accessing-parent-data-in-nested-repeater-in-the-headertemplate – 2013-02-28 13:46:09
谢谢蒂姆,最后我使用父数据源的值来隐藏文字。 'DirectCast(DirectCast(e.Item.NamingContainer.NamingContainer,RepeaterItem).DataItem,DataRowView).Row.Item(“Lunch”)' – 2013-02-28 14:24:15
@JackPettinger:这个答案是否解决?如果是这样,恕我直言,最好的办法是发布您的解决方案作为答案。这样,任何有类似问题的人都可以从你的答案中受益。 – 2013-02-28 15:04:31