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 で、列がデータソースに存在するかどうかに応じて、litDietaryRequirements を非表示にしたいと考えてDietaryいます。私は次のことを試しました:

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 は Nothing のようです

4

1 に答える 1

0

最後に私はこれをしました:

If e.Item.ItemType = ListItemType.Header Then
   Dim LunchRequired As Boolean = DirectCast(DirectCast(e.Item.NamingContainer.NamingContainer, RepeaterItem).DataItem, DataRowView).Row.Item("Lunch")
   DirectCast(e.Item.FindControl("litDietaryRequirements"), Literal).Visible = LunchRequired
End If
于 2013-02-28T17:26:20.080 に答える